Hibernate пытается дважды создать одну и ту же сущность/таблицу, когда используется @TableGenerator - как этого избежать?

Я использую спящий режим с моим приложением 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 как часть двух компонентов Entity, спящий режим пытается создать его дважды. Во-первых, при развертывании EdmSequenceDTO и, во-вторых, когда PersonDTO ссылается на EDIS_SEQUENCE как часть аннотации @TableGenerator.

В моем файле persistence.xml у меня есть свойство hibernate.hbm2ddl.auto со значением = "обновление". Мне нужно иметь это значение вместо "create-drop".

Интересно, есть ли способ избежать ошибки, о которой сообщает спящий режим?


person javauser71    schedule 22.02.2011    source источник
comment
Никто не сталкивался с этой ошибкой?? Хм !!   -  person javauser71    schedule 24.02.2011


Ответы (1)


Если она еще не решена, вам не следует сопоставлять таблицу EDIS_SEQUENCE с классом сущностей. Он используется внутри спящего режима.

person gkamal    schedule 11.10.2011