PostgreSQL 9.6 Секционированная таблица и grails 2.5.6. Странная операция под tomcat7 или tomcat8 - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть такая конфигурация в моем проекте: - grails 2.5.6 и hibernate4 (4.3.8.1) - PostgreSQL 9.6 с секционированными таблицами (для разбиения мы использовали расширение pg_partman) - Развернуто в tomcat 7

Мы думали об обновлении tomcat7 до tomcat8 или tomcat8.5.И теперь возникает проблема, с tomcat7 все работает нормально.Но при развертывании той же войны на tomcat8 мы получаем эту ошибку, когда пытаемся сохранить запись в многораздельной таблице:

2018-09-06 17:33:14,976 [lecturaQueueMessageJmsListenerContainer-1] ERROR The database returned no natively generated identity value; nested exception is org.hibernate.HibernateException: The database returned no natively generated identity value
2018-09-06 17:33:14,977 [lecturaQueueMessageJmsListenerContainer-1] ERROR hibernate.AssertionFailure  - HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in xxx.Lectura entry (don't flush the Session after an exception occurs)
2018-09-06 17:33:15,125 [lecturaQueueMessageJmsListenerContainer-1] ERROR Lectura$$EnhancerBySpringCGLIB$$c61146fe.queueMessage  - Exception raised in message listener
org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'queueMessage' threw exception; nested exception is org.hibernate.AssertionFailure: null id in xx.Lectura entry (don't flush the Session after an exception occurs)
    at grails.plugin.jms.listener.adapter.PersistenceContextAwareListenerAdapter.invokeListenerMethod(PersistenceContextAwareListenerAdapter.groovy:45)
    at grails.plugin.jms.listener.adapter.LoggingListenerAdapter.onMessage(LoggingListenerAdapter.groovy:49)
    at grails.plugin.jms.listener.adapter.PersistenceContextAwareListenerAdapter.onMessage(PersistenceContextAwareListenerAdapter.groovy:33)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.AssertionFailure: null id in xx.Lectura entry (don't flush the Session after an exception occurs)
    ... 4 more 

Я полагаю, что проблема связана с гибернацией.Имеет ли это смысл?Кто-нибудь знает, почему я получаю эту ошибку на tomcat8, а не на tomcat7?

Читая об этом, я вижу, что многие люди говорят о получении ошибки null id, но она не должна работатьна tomcat7, ни tomcat8.Вот почему я не понимаю, почему в моем случае работает нормально на tomcat7, но не работает на tomcat8 или tomcat8.5.

PS.Просто, чтобы добавить больше путаницы, если я разверну войну на tomcat8, но под Windows она работает правильно.Но если я разверну его под Linux (официальный докер контейнер Alpine tomcat 8), то из-за ошибки null id при сохранении записи.

1 Ответ

0 голосов
/ 21 сентября 2018

Кажется, ваша база данных возвращает запись с идентификатором null.Вы пытались выполнить сырой SQL-запрос и проверить, что возвращается?Вы можете попробовать сделать так:

// Get sessionFactory injecting in a service or from ApplicationContext
final session = sessionFactory.currentSession
final String query = 'select * from my_table';
final queryResults = session.createSQLQuery(query).list();
// Inspect your result list
...