gpt4 book ai didi

java - TransactionRequiredException 执行更新/删除查询

转载 作者:IT老高 更新时间:2023-10-28 11:03:56 29 4
gpt4 key购买 nike

您好,我正在使用带有 spring 和 mongodb 的 hibernate JPA,并且我正在 Glassfish-4.0 上运行我的应用程序。

我的服务等级是:

@Component
public class Test {
@PersistenceContext
EntityManager em;
EntityManagerFactory emf;

@Transactional
public String persist(Details details) {
details.getUsername();
details.getPassword();

Query query = em.createNativeQuery("db.details.find(username="+details.getUsername()+"&password="+details.getPassword());

em.getTransaction().begin();
em.persist(details);
em.getTransaction().commit();
em.flush();
em.clear();
em.close();
query.executeUpdate();
System.out.println("Sucessful!");
return "persist";
}
}

而我的 spring-context.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.javapapers.spring.mvc" />
<context:annotation-config />
<mvc:annotation-driven />
<tx:annotation-driven transaction-manager="txManager" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="ogmTest"/>
</bean>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
</bean>
</beans>

我在代码中应用了一些更改,但它们没有效果。谁能帮我解决这个问题。提前致谢。

最佳答案

但是,在网上搜索类似问题后,我不确定这是否会对您的情况有所帮助(即是否仍然存在)。

我正在从持久性 EntityManager 创建 native 查询以执行更新。

Query query = entityManager.createNativeQuery(queryString);

我收到以下错误:

caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query

许多解决方案建议将@Transactional 添加到您的方法中。只是这样做并没有改变错误。

一些解决方案建议向 EntityManager 询问 EntityTransaction 以便您可以调用 begin 并自己提交。这会引发另一个错误:

caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead

然后我尝试了一种大多数网站都说是使用应用程序管理的实体管理器而不是容器管理的方法(我相信 Spring 是),那就是 joinTransaction()

@Transactional 装饰方法,然后在调用 query.executeUpdate() 之前在 EntityManager 对象上调用 joinTransaction() 和我的 native 查询更新有效。

我希望这可以帮助遇到此问题的其他人。

关于java - TransactionRequiredException 执行更新/删除查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821579/

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