Използвам хибернация с моето J2EE приложение, внедрено на JBoss 6.0. Моята база данни е Oracle 11i и Derby. За генериране на първичен ключ (работещ сериен идентификатор) използвам анотация @TableGenerator в един от моите обекти (PersonDTO) - като:
@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 Entity beans, hibernate се опитва да го създаде два пъти. Първо, когато EdmSequenceDTO е разгърнат и второ, когато PersonDTO препраща към EDIS_SEQUENCE
като част от @TableGenerator
анотация.
В моя persistence.xml
файл имам hibernate.hbm2ddl.auto
свойство със стойност = "актуализация". Трябва да имам тази стойност вместо "create-drop".
Чудя се има ли някакъв начин да избегна грешката, докладвана от hibernate?