2017-11-25 10 views
0

JPAを使用してSpring MVCでEntity Listを永続化したいのですが、次のエラーが発生しました。エラーを永続化するEntity List - java.lang.IllegalStateException:共有EntityManagerでトランザクションを作成できません

java.lang.IllegalStateException:共有のEntityManager上でトランザクションを作成するために許可されていません - 代わりに春のトランザクションやEJB CMTを使用

私は答えをグーグルで試みたが、私の状況に解決策を適用することができませんでした。

私のサービス実装のメソッドは次のとおりです。 temporaryRecordDaoインターフェースとその実装

@Override 
@Transactional 
public void saveTemporaryRecords(List<TemporaryRecord> temporaryRecords) { 

    for (TemporaryRecord temporaryRecord : temporaryRecords) { 

     try { 
      temporaryRecordDao.persist(temporaryRecord); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

は任意の方法を持っていない、それらは以下の方法でAbstractDao実装を拡張:

@PersistenceContext 
protected EntityManager em; 

@Override 
public void persist(Entity entity) throws Exception { 

    if (entity == null) { 
     throw new Exception("Entity is null"); 
    } 

    try { 
     em.persist(entity); 
    } catch (Exception ex) { 
     ex.getMessage(); 
     em.getTransaction().rollback(); 
     em.close(); 
    } 
} 

ディスパッチャ-servlet.xmlは、以下の関連する構成を有しています

<!-- Configure Entity Manager --> 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:dataSource-ref="dataSource" 
      p:packagesToScan="hu.beczdev.webbudgetapp.model"> 

    <property name="jpaVendorAdapter"> 
     <bean id="jpaVendorAdapter" 
      class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
      p:databasePlatform="org.hibernate.dialect.MySQL5Dialect" p:showSql="true" /> 
    </property> 
</bean> 

<!-- Configure TransactionManager --> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManager"/> 

答えて

0

解決済み。

saveTemporaryRecordsメソッドは、データベースからデータを読み取っていた別のメソッドの中で呼び出されました(@Transactionalアノテーションはありません)。これは取引を混乱させた。私はsaveTemporaryRecordsから@Transactionalアノテーションを削除し、それを呼び出し元メソッドに置き、問題を解決しました。

関連する問題