2017-04-27 8 views
0

は私がのEntityManagerとサービスを持っているし、initメソッドにDAOクラスを作成し、DAOのconsctructor:javax.persistence.TransactionRequiredException:アクティブなトランザクション

@Slf4j 
public class OPhoneService { 
@Setter 
    private EntityManager entityManager; 

public void init() { 
     log.info("init"); 
     log.info(Thread.currentThread().getName()); 
     oPhoneDao = new OPhoneDaoImpl(entityManager); 
     List<OPhone> oPhones = oPhoneDao.getAllOPhones(0); 
     OPhone oPhone = oPhones.get(0); 
     oPhone.setState(1); 
     oPhoneDao.merge(oPhone); 
} 

} 

にし、このラインoPhoneDao.merge(oPhone); GET誤差にEntityManagerを渡す一切現在ありません。

javax.persistence.TransactionRequiredException: There is no currently active transaction. 

私のマージ方法:

@Override 
    public E merge(E e) { 
     E merge = entityManager.merge(e); 
     entityManager.flush(); 
     return merge; 
    } 

と私のbeanの設定

<bean id="oPhoneBean" class="....services.OPhoneService" init-method="init" 
      scope="singleton"> 
     <jpa:context unitname="ophone" property="entityManager"/> 
     <tx:transaction method="*" value="Required"/> 
    </bean> 

答えて

0

マージメソッドでトランザクションを開始しコミットする必要があります。

@Override 
public E merge(E e) { 
    EntityTransaction tx = entityManager.getTransaction(); 
    tx.begin(); 
    E merge = entityManager.merge(e); 
    tx.commit(); 
    entityManager.flush(); 
    return merge; 
} 
0

これはAries blueprintの既知の問題です。トランザクション型インターセプタはinitメソッドに追加されません。

ARIES-1715

+0

Okです。それはテスト用です。私は石英メソッドを使用するときに私はいくつかのエラーが発生するので、私はinitメソッドでこれを記述します。私はinitメソッドでdaoを作成し、yhemはschedulet quartzメソッドでこのDAOを使用してみてください。私がアプリケーションをマージすると呼び出すときフリーズ – user5620472

+0

私は終了してもうカラフとはうまくいかないでしょう。 – user5620472

+0

あなたはなぜ尋ねますか? –

関連する問題