TransactionRequiredException执行更新/删除查询

我在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创建本机查询以执行更新。

Query query = entityManager.createNativeQuery(queryString);

我收到以下错误:

引起原因:javax.persistence.TransactionRequiredException:执行更新/删除查询

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

一些解决方案建议向EntityManager索要a,EntityTransaction以便你可以调用begin并提交自己。这引发了另一个错误:

引起原因:java.lang.IllegalStateException:不允许在共享的EntityManager上创建事务-使用Spring事务或EJB CMT代替

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

@Transactional装饰方法,然后调用joinTransaction()调用EntityManager对象的前夕query.executeUpdate(),我的本地查询更新工作。

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

以上是 TransactionRequiredException执行更新/删除查询 的全部内容, 来源链接: utcz.com/qa/410084.html

回到顶部