数据未插入JPA Spring weblogic中

时间:2016-05-10 05:52:58

标签: 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 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>

现在我的DAO课程

@Repository
public class EmployeeDAO{

    @PersistenceContext
    private EntityManager em;
    @Transactional
    public void create(Employee entity) {
        LOG.error("Enitity Manager:create" + em);
        em.persist(entity);
        // em.flush(); if i use flush it saves
    } 
}

现在,当我保存实体时,它没有说出任何错误,但没有数据更新到db。 我不希望使用flush,因为entitymanager是由spring注入的,并且应该在结束时自动执行flush,这是不会发生的。纠正我的理解。

添加外观类可能会有问题,Propagation.REQUIRES_NEW有什么事吗?

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void process(){
    Employee e = factory.getEmployee();
    employeeDao.create(e);
}

在创建方法调用之后的调试中,它显示员工已填充主键,表示已进行db调用,但最后它不会保留。

1 个答案:

答案 0 :(得分:0)

请尝试3:

中的任何一个

1.Solution 1

请拨打以下代码

em.joinTransaction();

之前

 em.persistEntity(entity);

2.Solution 2

在@Transactional中使属性readOnly = false

3.Solution 3

尝试在spring xml文件中手动添加bean EmployeeDAO

或者你可以尝试下面的内容:

@Transactional(propagation=Propagation.REQUIRED)