JPATransactionManager和注释驱动事务
我有一个小的spring3/HibernateJPA应用程序正在运行,在尝试使用事务性注释时遇到了麻烦。基本上,TransactionManager忽略了它们 我修改了一个save方法,以突出显示事务属性readOnly正在被忽略。基本上,我认为persist调用会导致抛出异常,因为readOnly属性被设置为true,但事实并非如此,实体很高兴地持久化到内存中的HSQLDBJPATransactionManager和注释驱动事务,jpa,transactional,transactionmanager,Jpa,Transactional,Transactionmanager,我有一个小的spring3/HibernateJPA应用程序正在运行,在尝试使用事务性注释时遇到了麻烦。基本上,TransactionManager忽略了它们 我修改了一个save方法,以突出显示事务属性readOnly正在被忽略。基本上,我认为persist调用会导致抛出异常,因为readOnly属性被设置为true,但事实并非如此,实体很高兴地持久化到内存中的HSQLDB @Transactional(readOnly=true) public Product save(Product pr
@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" />
${hibernate.hbm2ddl.auto}
net.sf.ehcache.hibernate.EhCacheProvider
真的
真的
有没有人会举一个JPATransactionManager处理事务属性的例子,或者我完全误解了JPA的用法?我可以在EntityManager构造函数中看到,PersistenceContext始终是扩展的,而事务似乎与是否考虑注释有关。任何帮助都将不胜感激
谢谢,
马克。这不是一个bug。这是一种预期的行为:
这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常
这不是虫子。这是一种预期的行为:
这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常
谢谢你,JB!我不认为这只是一个暗示。我似乎仍然无法控制事务,但在生产环境中,persist实际上并没有保存到数据库中。它确实将绑定到id的序列向前移动了1倍,但表中没有任何内容,日志中也没有任何迹象表明出现了任何错误。谢谢你!我不认为这只是一个暗示。我似乎仍然无法控制事务,但在生产环境中,persist实际上并没有保存到数据库中。它确实将绑定到id的序列向前移动了1步,但表中没有任何内容,日志中也没有任何迹象表明出现了任何错误。