数据没有插入JPA Spring weblogic中



我在应用程序上下文中有以下配置

<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
    } 
}

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

添加facade类可能是个问题,Propagation.REQUIRES_NEW和这里有什么关系吗?

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

在创建方法调用后的调试中,它显示员工已填充主键,这意味着数据库调用已经进行,但最后它没有持久化。

请尝试3:

1.解决方案1

请拨打以下代码

em.joinTransaction();

就在之前

 em.persistEntity(entity);

2.解决方案2

在@Transactional 中使属性readOnly=false

3.解决方案3

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

或者你可以试试下面的:

@Transactional(propagation=Propagation.REQUIRED)

最新更新