未在JPA Spring weblogic中插入数据
我在应用程序上下文中有以下配置未在JPA Spring weblogic中插入数据,spring,jpa,eclipselink,jta,Spring,Jpa,Eclipselink,Jta,我在应用程序上下文中有以下配置 <jee:jndi-lookup id="dataSource" jndi-name="MY_DS" /> <context:load-time-weaver/> <bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager" /> <tx:annotation-driven tr
<jee:jndi-lookup id="dataSource" jndi-name="MY_DS" />
<context:load-time-weaver/>
<bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jtaDataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="persistenceUnitName" value="pu_TEST" />
</bean>
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="database" value="ORACLE" />
<property name="showSql" value="true" />
</bean>
现在,当我保存实体时,它没有说“给出任何错误”,但没有数据更新到数据库中。
我不希望使用flush,因为entitymanager是由spring注入的,应该在最后自动执行flush,这是不可能的。纠正我的理解
添加facade类可能是一个问题,Propagation.REQUIRES\u NEW与此有关吗
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void process(){
Employee e = factory.getEmployee();
employeeDao.create(e);
}
在创建方法调用后进行调试时,显示employee已填充主键,这意味着已进行了db调用,但最后它未被持久化。请尝试以下三种方法之一: 1.解决方案1 请拨打下面的电话号码
em.joinTransaction();
就在之前
em.persistEntity(entity);
2.解决方案2
在@Transactional中使属性readOnly=false
3.解决方案3
尝试在SpringXML文件中手动添加bean EmployeeDAO
或者,您可以尝试以下操作:
@Transactional(propagation=Propagation.REQUIRED)
您使用的是哪个Spring版本?我使用的是Spring 3.2 EntityManager没有连接到您的事务管理器,因此没有注册为事务提交时的侦听器。正如下面的回答中提到的,em.joinTransaction()可以工作,但它是一种变通方法,就像调用em.flush一样。您缺少此处概述的传递给TransactionManager的entityManagerFactory属性,或者尝试设置我正在使用的目标服务器属性“org.springframework.transaction.jta.WebLogicJtaTransactionManager”。它不允许使用EMF属性。bean类的属性“entityManagerFactory”无效[org.springframework.transaction.jta.WebLogicJtaTransactionManager]:Bean属性“entityManagerFactory”不可写或具有无效的setter方法。setter的参数类型是否与getter的返回类型匹配?2和3不工作,不想使用1的解决方法这里的问题是EntityManager无法与JTA事务关联。另一种方法是,尽管其类型为m手动启动事务,例如em.getTransaction(),然后手动启动和提交事务。请看这篇文章
@Transactional(propagation=Propagation.REQUIRED)