2013-07-26 2 views
0

Чтобы обойти ошибку Hibernate HHH-2763, я пытаюсь обновить свое приложение с Hibernate 3 до Hibernate 4. Казалось, он прошел гладко, пока я не понял, что, хотя мое приложение может читать данные, никогда не кажется, что они вставляют или обновляют. Я включил ведение журнала SQL: в Hibernate 3 есть вставки и обновления. В Hibernate 4 нет вставок и обновлений.Hibernate 4 + Spring 3, No Inserts или Updates

Мы не делали явных флеши в Hibernate 3, перекрывая класс OpenSessionInViewFilter closeSession метод следующим образом:

public void closeSession(Session session, SessionFactory sessionFactory) { 
    session.flush(); 
    super.closeSession(session, sessionFactory); 
} 

Но в Hibernate 4, это уже не вариант, потому что этот метод больше не существует.

Мои Hibernate конфигурации 4 для Factory Session и менеджер транзакций следующим образом:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.default_schema">${oracle.default_schema}</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.generate_statistics">false</prop> 
      <prop key="hibernate.show_sql">${hibernate.showSql}</prop> 
      <prop key="hibernate.use_sql_comments">true</prop> 
      <prop key="hibernate.format_sql">true</prop> 
     </props> 
    </property> 
    <property name="mappingResources"> 
     <list> . . . </list> 
    </property> 
    <property name="annotatedClasses"> 
     <list> . . . </list> 
    </property> 
</bean> 

<!-- Configure transaction management, enabling @Transactional annotations --> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
    <property name="nestedTransactionAllowed" value="true" /> 
</bean> 

(Edit) А вот конфигурация OpenSessionInViewFilter:

<filter> 
    <filter-name>hibernateFilter</filter-name> 
    <filter-class> 
     org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 
    </filter-class> 
    <init-param> 
     <param-name>sessionFactoryBeanName</param-name> 
     <param-value>sessionFactory</param-value> 
    </init-param> 
</filter> 

Я думаю, что это не так промывание и фиксация. Но почему?

+1

Wt о вашем интерфейсе транзакций? Вы должны изменить свойство update в своей аннотации @ transactional. –

+0

Для улучшения или, что хуже, мы явно указываем 'readOnly = true' или' readOnly = false' с каждой аннотацией '@ Transactional'. Это то, что вы имели ввиду? – Marvo

ответ

0

Что вы подразумеваете под «Но в Hibernate 4, это уже не вариант, потому что этот метод больше не существует»? весна приходит с OpenSessionInViewFilter для спящего режима 4, который:

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 

вы все еще используете?

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 

попробовать новый OpenSessionInViewFilter для спящих 4

редактировать ...

Вам не придется смывать сеанс вручную, менеджер передаст будет заботиться о нем, как Javadoc из hibernate4 OpenSessionInViewFilter говорит:

активный менеджер транзакций будет временно изменить режим промывки в FlushMode.AUTO во время транзакции чтения-записи, с сбросом режима сброса в FlushMode.NEVER в конце каждой транзакции.

вы можете изменить при входе в уровень СЛЕД и проверьте консоль, чтобы убедиться, что режим промывки установлен в положение AUTO:

... установка режима заподлицо: AUTO

или вы можете опубликовать свой фрагмент кода сохранения/обновления?

+0

Извините, я не был чист. Вы больше не можете переопределять метод closeSession в OpenSessionInViewFilter, потому что он не существует или не является общедоступным.Мы используем версию hibernate4 этого фильтра. http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/orm/hibernate4/support/OpenSessionInViewFilter.html – Marvo

Смежные вопросы