Ошибка подтверждения гибернации при использовании C3P0 - PullRequest
0 голосов
/ 21 октября 2011

У меня есть сервер Tomcat, использующий Hibernate 3.3 на сервере MS Sql.При использовании пула соединений Hibernate по умолчанию я получал несколько ошибок, связанных с соединениями в недопустимом состоянии, поэтому мы решили переключиться на C3P0 и использовать параметр testConnectionOnCheckout.

Проблема в том, что теперь мы получаем эти ошибки:

2011-10-21 15:30:39,125 ERROR [http-8080-8] 
(org.slf4j.impl.JCLLoggerAdapter.error(JCLLoggerAdapter.java:532)) - 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 X entry (don't flush the Session after an exception occurs)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:78)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:997)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1590)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
    ...

Содержимое файла hibernate.cfg.xml:

<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://...</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

<property name="hibernate.current_session_context_class">thread</property>

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.idle_test_period">100</property>
<property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property>
<property name="hibernate.c3p0.testConnectionOnCheckout">true</property>

C3P0 действительно запускается, мы видим это в журналах.Но мы не имеем ни малейшего представления о том, что является причиной провала утверждения.Проверка других вопросов в SO не принесла никакой полезной информации.Есть идеи?

...