Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPATransactionManager和注释驱动事务_Jpa_Transactional_Transactionmanager - Fatal编程技术网

JPATransactionManager和注释驱动事务

JPATransactionManager和注释驱动事务,jpa,transactional,transactionmanager,Jpa,Transactional,Transactionmanager,我有一个小的spring3/HibernateJPA应用程序正在运行,在尝试使用事务性注释时遇到了麻烦。基本上,TransactionManager忽略了它们 我修改了一个save方法,以突出显示事务属性readOnly正在被忽略。基本上,我认为persist调用会导致抛出异常,因为readOnly属性被设置为true,但事实并非如此,实体很高兴地持久化到内存中的HSQLDB @Transactional(readOnly=true) public Product save(Product pr

我有一个小的spring3/HibernateJPA应用程序正在运行,在尝试使用事务性注释时遇到了麻烦。基本上,TransactionManager忽略了它们

我修改了一个save方法,以突出显示事务属性readOnly正在被忽略。基本上,我认为persist调用会导致抛出异常,因为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" />

${hibernate.hbm2ddl.auto}
net.sf.ehcache.hibernate.EhCacheProvider
真的
真的
有没有人会举一个JPATransactionManager处理事务属性的例子,或者我完全误解了JPA的用法?我可以在EntityManager构造函数中看到,PersistenceContext始终是扩展的,而事务似乎与是否考虑注释有关。任何帮助都将不胜感激

谢谢, 马克。

这不是一个bug。这是一种预期的行为:

这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常

这不是虫子。这是一种预期的行为:

这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常


谢谢你,JB!我不认为这只是一个暗示。我似乎仍然无法控制事务,但在生产环境中,persist实际上并没有保存到数据库中。它确实将绑定到id的序列向前移动了1倍,但表中没有任何内容,日志中也没有任何迹象表明出现了任何错误。谢谢你!我不认为这只是一个暗示。我似乎仍然无法控制事务,但在生产环境中,persist实际上并没有保存到数据库中。它确实将绑定到id的序列向前移动了1步,但表中没有任何内容,日志中也没有任何迹象表明出现了任何错误。