Hi I am using hibernate JPA with spring and mongodb and i am running my application on Glassfish-4.0.
My service class is :
@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";             } }   And my spring-context.xml is :
<?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>   I have applied some changes in the code but their is no effect. Can anyone please help me to sort out this. Thanks in advance.
I am not sure if this will help your situation (that is if it stills exists), however, after scouring the web for a similar issue.
I was creating a native query from a persistence EntityManager to perform an update.
Query query = entityManager.createNativeQuery(queryString);   I was receiving the following error:
caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query
Many solutions suggest adding @Transactional to your method. Just doing this did not change the error.
Some solutions suggest asking the EntityManager for a EntityTransaction so that you can call begin and commit yourself. This throws another error:
caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
I then tried a method which most sites say is for use application managed entity managers and not container managed (which I believe Spring is) and that was joinTransaction().
Having @Transactional decorating the method and then calling joinTransaction() on EntityManager object just prior to calling query.executeUpdate() and my native query update worked.
I hope this helps someone else experiencing this issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With