Я использую следующие аннотации полей:
@Id
@TableGenerator( name = "comment_sequence", pkColumnValue = "comment_sequence" )
@GeneratedValue( strategy = GenerationType.TABLE, generator = "comment_sequence" )
private Long id_comment;
SQL для создания таблицы:
CREATE TABLE hibernate_sequences ( sequence_name VARCHAR(255) NOT NULL, next_val bigint, PRIMARY KEY ( sequence_name ) );
INSERT INTO hibernate_sequences VALUES ( 'comment_sequence', 1 );
Но сущность просто не сохраняется. Любая идея о том, что может происходить? Я делаю что-то не так с кодом, представленным выше?
РЕДАКТИРОВАТЬ:
Я скрыл немного информации в исходном посте, извините (спрашивал посреди ночи почти во сне =/).
Объект создается правильно, если я изменю стратегию на SEQUENCE
и добавлю SQL CREATE SEQUENCE hibernate_sequence
, все будет работать нормально (он сохраняется), но я хочу использовать стратегию TABLE
для хранения каждой последовательности таблиц в строке на hibernate_sequences
.
Единственное исключение, которое у меня есть, это TransactionRolledbackException
из-за NullPointerException
, вызванного неудачным тестом в тесте интеграции. Ничего явного, почему он не вставляет данные.
Я получаю следующий вывод гибернации при использовании hibernate.show_sql = true
:
...
12:38:48,753 INFO [stdout] (pool-5-thread-1) Hibernate:
12:38:48,754 INFO [stdout] (pool-5-thread-1) insert
12:38:48,755 INFO [stdout] (pool-5-thread-1) into
12:38:48,756 INFO [stdout] (pool-5-thread-1) cm_comment
12:38:48,757 INFO [stdout] (pool-5-thread-1) (cd_status, ds_message, dt_alt, dt_inc, id_user_alt, id_user_inc, id_problem, id_comment)
12:38:48,758 INFO [stdout] (pool-5-thread-1) values
12:38:48,759 INFO [stdout] (pool-5-thread-1) (?, ?, ?, ?, ?, ?, ?, ?)
12:38:48,766 INFO [stdout] (pool-5-thread-1) Hibernate:
12:38:48,766 INFO [stdout] (pool-5-thread-1) select
12:38:48,767 INFO [stdout] (pool-5-thread-1) commentent0_.id_comment as id1_6_,
12:38:48,768 INFO [stdout] (pool-5-thread-1) commentent0_.cd_status as cd2_6_,
12:38:48,770 INFO [stdout] (pool-5-thread-1) commentent0_.ds_message as ds3_6_,
12:38:48,771 INFO [stdout] (pool-5-thread-1) commentent0_.dt_alt as dt4_6_,
12:38:48,772 INFO [stdout] (pool-5-thread-1) commentent0_.dt_inc as dt5_6_,
12:38:48,773 INFO [stdout] (pool-5-thread-1) commentent0_.id_user_alt as id6_6_,
12:38:48,774 INFO [stdout] (pool-5-thread-1) commentent0_.id_user_inc as id7_6_,
12:38:48,775 INFO [stdout] (pool-5-thread-1) commentent0_.id_problem as id8_6_
12:38:48,776 INFO [stdout] (pool-5-thread-1) from
12:38:48,777 INFO [stdout] (pool-5-thread-1) cm_comment commentent0_
12:38:48,778 INFO [stdout] (pool-5-thread-1) where
12:38:48,779 INFO [stdout] (pool-5-thread-1) commentent0_.id_problem=?
12:38:48,840 ERROR [org.jboss.arquillian.protocol.jmx.JMXTestRunner] (pool-5-thread-1)
...
java.lang.AssertionError: expected:<1> but was:<0>
...
Я не уверен, может ли это быть связано, но в предыдущем тесте я получаю сообщение об ошибке:
12:50:36,510 INFO [org.jboss.as.ejb3] (pool-4-thread-1) JBAS014101: Failed to find SFSB instance with session ID {[-98, -17, -32, -33, 63, 107, 74, 59, -76, -127, -19, 29, 24, 45, -50, 5]} in cache
Когда я меняю postgresql.conf
на log_statement = 'all'
и проверяю каталог pg_log
после запуска приложения, я не вижу никаких журналов. Поэтому я не уверен, как я могу включить эту опцию.
Я также использую Arquillian, API arquillian persistence и управляемый экземпляр JBoss для интеграционного тестирования. Я собираюсь обновить теги, потому что это может быть связано с любым из них.
log_statement
в PostgreSQL, а затем просмотреть файл журнала PostgreSQL на наличие утверждений и ошибок, которые могут иметь значение. Убедитесь, что ваш код также не проглатывает исключения. - person Craig Ringer   schedule 03.03.2013SEQUENCE
, все будет работать нормально. - person Fagner Brack   schedule 03.03.2013