2016-05-09 10 views
0

Spring Data Jpa save()メソッドを使用してエンティティをデータベースに保存しています。このメソッドは保存されたエンティティオブジェクトを返しますが、新しいエンティティを保存する場合、返されたオブジェクトは@ManyToManyの完全なエンティティなどで埋められません。Spring Data JPAは新しいEntityを保存し、すべての依存関係を取得します

私が知っている限り、Spring Data JPAは新しいエンティティを保存するときにはentityManager.persist()メソッドを使用し、エンティティがデータベースに存在する場合、save()メソッドはentityManager.merge()メソッドを使用します。

私の質問は、データベースに新しいエンティティを保存し、1つのトランザクションで完全な依存関係を取得する方法です。

私は豆のサービスのように、延びていることが、いくつかのヘルパークラスを追加しようとしていた。

public abstract class HelperPersistenceService<E extends AbstractEntity<I>, I extends Serializable> { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Transactional 
    public E saveWithMerge(E e) { 
     if (e.getId() == null) { 
      entityManager.persist(e); 
     } 
     return entityManager.merge(e); 
    } 

} 

、それは@Transactional方法なしで動作します。しかし、今私は例外を持っています:

javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:278) 
    at com.sun.proxy.$Proxy778.persist(Unknown Source) 

この問題を解決するには?

答えて

2

カスケード= persistを追加しましたか、多対多の関係にマージしましたか?

この動作は、このカスケードが存在する必要があります。

関連する問題