1

我将休眠与部署在 JBoss 6.0 上的 J2EE 应用程序一起使用。我的数据库是 Oracle 11i 和 Derby。为了生成主键(运行序列号),我在我的一个实体(PersonDTO)中使用@TableGenerator 注释 - 例如:

  @Entity
  @Table(name = "EDIS_PERSON")
  public class PersonDTO {
    @Id
    @TableGenerator(name="TABLE_GEN", 
                       table="EDIS_SEQUENCE", pkColumnName="SEQ_NAME",
                       valueColumnName="SEQ_COUNT", 
                       pkColumnValue="PERSON_ID", allocationSize = 5)
    @GeneratedValue(strategy=GenerationType.TABLE, generator="TABLE_GEN")
    private long id; 
    .
    .
    .

我已经为序列定义了所需的实体 - 比如:

@Entity
@Table(name = "EDIS_SEQUENCE")
public class EdmSequenceDTO {
    @Id
    private String SEQ_NAME;
    private long SEQ_COUNT;
    .
    .
    .

就序列生成而言,一切正常。但是在创建实体期间(当我第一次部署 J2EE 应用程序时),我在 JBoss server.log 文件中看到以下错误,尽管我的所有实体/表最终都成功创建。

14:04:16,817 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] Unsuccessful: create table EDIS_SEQUENCE ( SEQ_NAME varchar(255),  SEQ_COUNT integer ) 
14:04:16,817 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] Table/View 'EDIS_SEQUENCE' already exists in Schema 'EDM'.
14:04:16,818 INFO  [org.hibernate.tool.hbm2ddl.SchemaUpdate] schema update complete**

我相信这“不是”实际上是一个错误。看起来因为我引用EDIS_SEQUENCE了 2 个实体 bean 的一部分,所以休眠尝试创建它两次。首先,部署 EdmSequenceDTO 时,其次,当 PersonDTO 引用EDIS_SEQUENCE作为@TableGenerator注释的一部分时。

在我的persistence.xml文件中,我有hibernate.hbm2ddl.autovalue="update" 的属性。我需要有这个值而不是“create-drop”。

我想知道有什么办法可以避免hibernate报告的错误?

4

1 回答 1

2

如果尚未解决 - 您不应将 EDIS_SEQUENCE 表映射到实体类。它由hibernate内部使用。

于 2011-10-11T14:57:05.293 回答