gpt4 book ai didi

spring - 数据未插入 JPA Spring weblogic

转载 作者:行者123 更新时间:2023-12-01 08:27:13 28 4
gpt4 key购买 nike

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

<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 注入(inject)的,应该在最后自动执行 flush,而这并没有发生。纠正我的理解。

添加门面类可能存在问题,Propagation.REQUIRES_NEW 与这里有什么关系吗?

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

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

最佳答案

请尝试以下 3 种之一:

1.解决方案一

请调用以下代码

em.joinTransaction();

就在

 em.persistEntity(entity);

2.方案二

在@Transactional 中使属性readOnly=false

3.方案三

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

否则您可以尝试以下操作:

@Transactional(propagation=Propagation.REQUIRED)

关于spring - 数据未插入 JPA Spring weblogic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37130241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com