This post is in continuation of JPA How to get the value from database after persist
When I execute the following I am getting following exception, how can I resolve this?
Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT
DAOImpl code
public void create(Project project) { entityManager.persist(project); entityManager.getTransaction().commit(); project = entityManager.find(Project.class, project.getProjectId()); entityManager.refresh(project); System.out.println("Id -- " + project.getProjectId()); System.out.println("no -- " + project.getProjectNo()); }
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> <bean id="DataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="username" value="scott" /> <property name="password" value="tiger" /> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@myserver:1521:ORCL" /> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="DataSource" /> <property name="packagesToScan" value="test.entity" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> <property name="generateDdl" value="false" /> <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" /> </bean> </property> </bean> <context:component-scan base-package="test.net" /> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <context:annotation-config/> </beans>
I guess the problem here is that although you have defined the bean for the transaction manager, you haven't annotated the create() method with @Transactional
which enables spring transactions.
Also remove the entityManager.getTransaction().commit();
statement as now all the transaction management will be handled by spring, if you leave the statement as it is then you will get the same error again.
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