2017-06-07 14 views
0

私は簡単なAppUserエンティティクラスとテーブルをdb APP_USERSに持っています。 私はDAOクラスからaddAppUserを行うとき、私は例外の下に取得する:休止状態が持続しない

HTTPステータス500 - 要求の処理に失敗しました。 に渡さデタッチエンティティ持続:ネストされた例外は org.hibernate.PersistentObjectExceptionがあるcom.spring.model.AppUser

@Override 
public void addAppUser(AppUser p) { 
    Session session = this.sessionFactory.getCurrentSession(); 
    session.persist(p); 
    logger.info("AppUser saved successfully, AppUser Details="+p); 
} 

それを解決する方法がわかりません。同じコードは、別のクラスのオブジェクトを永続化するために正常に動作します。いくつかの研究をしましたが、助けになるものは何も見つかりませんでした。

+1

AppUserは以前に管理されていたエンティティで、現在は切断状態です。分離されたエンティティを永続化することはできません。永続化コンテキストで管理されるようにするには、最初にマージする必要があります。 – fg78nc

答えて

1

あなたのAppUserは外部から来ているので、休止状態では管理されません。あなたのDAOを再接続するmergeを呼び出し、すなわち、再びそれを処理休止状態にする:

session.merge(p); 

あなたはまだ例外に遭遇した場合、あなたは、オブジェクトが最初のセッションですでにあるかどうかを確認しようとすることができ、それならばupdate(obj)を呼び出しますそれ以外の場合はmerge(obj)としてください。例えば

は:

if(session.contains(obj)) session.update(obj); 
else session.merge(obj); 
+0

あなたの解決策を試してみてください。それはエンティティクラスにあった本当の問題を特定するのに役立ちました。私はString属性の上に@GeneratedValue(strategy = GenerationType.IDENTITY)を持っていました。それは何とか私が推測するオブジェクトを切り離した – Amar

0

私は以下の素朴なコードを持っていたので、私は問題を持っていた...それに気付きませんでした。

@Id 
    @Column(name = "enterid") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private String enterid; 

「String」であるenteridを自動生成できず、nullになっています。 私はそれがデバッグ中に気づいた。