我将休眠与部署在 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.auto
value="update" 的属性。我需要有这个值而不是“create-drop”。
我想知道有什么办法可以避免hibernate报告的错误?