2013-07-25 18 views
18

Questo post è in continuazione di JPA How to get the value from database after persistnon autorizzati a creare transazione sul EntityManager condiviso - utilizzare le transazioni di primavera o EJB CMT

Quando ho eseguire il seguente sto ottenendo seguente eccezione, come posso risolvere questo?

Not allowed to create transaction on shared EntityManager - use Spring 
transactions or EJB CMT 

DAOImpl codice

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> 

risposta

25

Credo che il problema qui è che anche se si è definito il fagiolo per il gestore delle transazioni, si rifugio 'ha annotato il metodo create() con @Transactional che abilita la transazione di primavera S.

Inoltre, rimuovere la dichiarazione entityManager.getTransaction().commit(); poiché ora tutta la gestione delle transazioni verrà gestita entro la primavera, se si lascia l'istruzione così com'è, si otterrà lo stesso errore di nuovo.

Problemi correlati