2013-07-26 2 views
0

Hibernate 버그 HHH-2763을 해결하기 위해 Hibernate 3에서 Hibernate 4로 응용 프로그램을 업데이트하려고합니다. 응용 프로그램이 실행되는 동안 깨닫기 전까지 원활하게 진행된 것 같습니다. 데이터를 읽을 수 있지만 삽입이나 업데이트를 수행하지 않는 것 같습니다. 나는 SQL logging을 켜 놓았다. Hibernate 3에서는 insert와 update가있다. 최대 절전 모드 4에는 삽입 및 업데이트가 없습니다. Hibernate 4 + Spring 3, No Insert 또는 Updates

우리는 다음과 같이 OpenSessionInViewFilter 클래스 ' closeSession 방법을 대체하여 최대 절전 모드 3에 명시 적 플러시를 수행하지 않았다 : 그 방법은 더 이상 존재하지 않기 때문에
public void closeSession(Session session, SessionFactory sessionFactory) { 
    session.flush(); 
    super.closeSession(session, sessionFactory); 
} 

그러나 최대 절전 모드 4

, 이것은 더 이상 옵션이 없습니다.

<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> 

내 생각은 그렇지 않은 것입니다 :

<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> 

(편집)를 그리고 여기 OpenSessionInViewFilter의 구성입니다 : 세션 공장 및 트랜잭션 관리에 대한

내 최대 절전 모드 4 구성은 다음과 플러싱 및 커밋. 하지만 왜?

+1

거래 인터페이스에 대한 정보는 어떻게됩니까? @ transactional 주석에서 update 속성을 변경해야합니다. –

+0

좋든 나쁘 든 우리는'@Transactional' 어노테이션마다'readOnly = true' 또는'readOnly = false'를 명시 적으로 지정합니다. 이게 네가 말하는거야? – Marvo

답변

0

"그러나 최대 절전 모드 4에서는이 방법이 더 이상 존재하지 않으므로 더 이상 옵션이 아닙니다."라는 것은 무엇을 의미합니까? 당신은 여전히 ​​사용하고

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 

: 봄은 최대 절전 모드 4에 대한 OpenSessionInViewFilter 함께 제공?

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 

최대 절전 4

편집에 대한 새로운 OpenSessionInViewFilter ... 수동으로 세션을 세척 할 필요가 없습니다

을 시도 transcation 매니저는 hibernate4 OpenSessionInViewFilter의 javadoc는, 그것은 처리됩니다 말한다 :

활성 트랜잭션 관리자가 일시적으로 FlushMode.AUTO으로 플러시 모드 변경됩니다 플러시 모드가 각 트랜잭션이 끝날 때 FlushMode.NEVER로 재설정 된 상태에서 읽기/쓰기 트랜잭션 중에을 실행합니다. 플러시 모드를 설정 ...

:

당신은 확실히 플러시 모드를 AUTO로 설정되어 있는지 확인하기 위해 당신이 TRACE에 로그 레벨 변경하고 콘솔을 확인할 수 있습니다 AUTO

또는 저장/업데이트 코드 조각을 게시 할 수 있습니까?

+0

죄송합니다. 명확하지 않았습니다. OpenSessionInViewFilter가 존재하지 않거나 public이 아니기 때문에 더 이상 OpenSessionInViewFilter의 closeSession 메소드를 오버라이드 할 수 없습니다.우리는이 필터의 hibernate4 버전을 사용하고 있습니다. http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/orm/hibernate4/support/OpenSessionInViewFilter.html – Marvo

관련 문제