2017-12-08 7 views
0

この問題を解決する方法を知っていますか?エンティティを削除しようとしていますが、このエラーメッセージは常に表示されます。削除関数org.hibernate.HibernateException:コレクションを2つの開いているセッションに関連付ける試みが不正です

これは使用されるコードです:

@Override 
public void remove(t_diklat diklat) { 


     Session session = HibernateUtil.getSessionFactory().openSession(); 

    try { 
     session.getTransaction().begin(); 
     session.delete(diklat); 
     session.getTransaction().commit(); 
    } catch (Exception ex) { 

     throw ex; 
    } 

と:

public String delete() { 
t_diklat diklat = (t_diklat)(listDiklat.getRowData()); 
     diklatDao dao = new diklat_Impl(); 
     dao.remove(diklat); 
     return "diklat_client"; 


    } 

これは私がまた私のmodel.classが、まだ何も@OneToMany(mappedBy = "diklat_id_5", cascade = CascadeType.ALL)を追加私のDAO

public interface diklatDao { 
    public t_diklat getTbl_diklat(Long id); 
    public void Save(t_diklat diklat); 
    public void remove(t_diklat diklat); 
    public void update(t_diklat diklat); 

    public List<t_diklat> ListTable(); 

} 

です。

+0

ここであなたはその質問をしていますか? diklat –

+0

また、dao.remove(diklat);の内部には何ですか? –

+0

これは私のdaoです: パブリックt_diklat getTbl_diklat(ロングID); public void Save(t_diklat diklat); public void remove(t_diklat diklat); パブリックvoid update(t_diklat diklat); –

答えて

0

私がいることをかなり確信している:あなたがデータを取得しているよう

public String delete() 

方法が既にオープンセッション内で呼び出されます。

t_diklat diklat = (t_diklat)(listDiklat.getRowData()); 

あなたがdao.remove()方法を打つ直前に。

dao内では、別のセッションを開いて、すでに開いていてまだ閉じていないセッションに関連付けられているエンティティを渡してみます。

ソリューションを使用することです:

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

の代わり:

Session session = HibernateUtil.getSessionFactory().openSession(); 

編集:

が新しいトランザクションを開けないようにしてくださいとでコミットを実行しません。ダオ。外部セッションの管理は十分であるはずです。だからあなたのDAOでちょうど:

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
session.delete(diklat); 
+0

あなたの答えのためにまず最初に感謝しますが、悲しいことに私はすでにそれを試しています。 しかし、私は正しいです、私はデバッグを実行し、私のdaoImplementクラスでは、私はDao.Removeを打つとda.comitに行く直後にdao.remove()に達する。その届かないdao.comit 私はこの問題を持って以来、週だった..他の解決策? –

+0

私の編集を試してみて –

+0

org.hibernate.HibernateException:アクティブなトランザクションがないと、このエラーメッセージは表示されません。トランザクションが開いていなければ起動できません。 –

関連する問題