我在应用程序上下文中有以下配置
<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调用,但最后它不会保留。
答案 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)