2013-07-25 9 views
18

Bu mesaj ı nasıl çözebiliriz, ben hariç aşağıdaki alıyorum aşağıdaki yürütmek zamanpaylaşılan EntityManager üzerinde işlem oluşturmasına izin yok - Bahar işlemlerini kullanmak ya da EJB CMT

JPA How to get the value from database after persist devamında yer almaktadır?

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

DAOImpl kod

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> 

cevap

25

Burada sorun sanırım size işlem yöneticisi için fasulye tanımlanmış olmasına rağmen, sen cenneti yay işlemi sağlayan @Transactional ile create() yöntemini açıklamalı s.

entityManager.getTransaction().commit(); deyimini de kaldırın, çünkü tüm işlem yönetimi ilkbaharda işlenecektir, çünkü bu deyimi olduğu gibi bırakırsanız, aynı hatayı tekrar alırsınız.

İlgili konular