2013-05-16 27 views
1

我有一個小的spring3/Hibernate JPA應用程序正在運行,並且在嘗試使用事務註釋時遇到了裁剪。基本上它們被TransactionManager忽略。JPATransactionManager和註解驅動事務

我有一個保存方法,我已經修改以強調事務屬性readOnly被忽略。基本上我會認爲持續調用會導致拋出一個異常,因爲readOnly屬性設置爲true,但事實並非如此,實體仍然愉快地持久存儲在內存中的HSQLDB中。

@Transactional(readOnly=true) 
public Product save(Product product) throws HibernateException { 

    getEntityManager().persist(product); 

    return product; 
} 

的JPATransaction經理如下有線...

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:testdb;shutdown=false" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="jpaProperties"> 
    <property name="ignoreUnresolvablePlaceholders" value="true" /> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
    <property name="searchSystemEnvironment" value="true" /> 
    <property name="location" value="classpath:landingPage-hibernate.properties"/> 
</bean> 

<util:properties id="jpaHibernateProperties"> 
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
    <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop> 
    <prop key="hibernate.cache.use_query_cache">true</prop> 
    <prop key="hibernate.cache.use_second_level_cache">true</prop> 
</util:properties> 

<bean id="hibernateVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="databasePlatform" value="${hibernate.dialect}"/> 
    <property name="showSql" value="${hibernate.show_sql}" /> 
    <property name="generateDdl" value="${generateDdl}"/> 
</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="landingPagePersistence"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter" ref="hibernateVendor"/> 
    <property name="jpaPropertyMap" ref="jpaHibernateProperties"/> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

<tx:annotation-driven transaction-manager="transactionManager" /> 

會有人有JpaTransactionManager接口的事務性工作屬性的例子或我誤解JPA的使用完全?我可以在EntityManager的構造函數中看到,PersistenceContext總是與EXTRENDED相對,而TRANSACTION似乎對註釋是否被考慮有一些影響。任何幫助將不勝感激。

感謝, 馬克。

回答

1

這不是一個錯誤。這是一個documented,預期的行爲:

這只是作爲實際事務子系統的提示;它不一定會導致寫訪問嘗試失敗。當被問及只讀事務時,不能解釋只讀提示的事務管理器不會拋出異常。

+0

謝謝你的JB!我不認爲這可能只是一個暗示。儘管如此,我仍然看不到交易的控制權,而且在生產中堅持不會實際存入數據庫。它會繼續向上移動一個綁定到id的序列,但是沒有任何東西進入表中,日誌中也沒有任何跡象表明任何東西都已經出錯。 –

相關問題