未在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)