Я использую спящий режим с моим приложением 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".
Интересно, есть ли способ избежать ошибки, о которой сообщает спящий режим?