0

スレッドで言及された多くのことを試しました。しかし、誰も私の問題を解決していないようです。どこが間違っているのか教えてください。

モデル

@Entity
public class MySession {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(unique=true)
    private String sessionId;
    @OneToMany(mappedBy="session")
    private List<MyRequest> requestList;

}

@Entity
public class MyRequest{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    private MySession session;
}

私のサーブレットでは:

SessionHome sh = new SessionHome();               //DAO Class
MyRequestHome mrh = new MyRequestHome();          //DAO Class

MySession session = sh.findBySessionId(sessionId);  //Object is in the detached state
session.setUpdated(new Date());             //Update the Session update time stamp  
session = sh.merge(session);                    //Update the database with the session. I was hoping merge would reattach the detached object

MyRequest mr = new MyRequest(hsrequest, newSessionToken);
mr.setSession(session);
mrh.persist(mr);                                    //PersistentObjectException here. This is because of the MySession object I have set over here.

まず、データベースから MySession オブジェクトを取得して更新し、新しく作成した MyRequest オブジェクトに設定します。MyRequest オブジェクトを永続化しようとすると、PersistentObjectException が発生します。他の情報が必要な場合はお知らせください。

4

1 に答える 1

2

一時的な MyRequest インスタンスで Merge を呼び出すことで修正されました。

前:

mrh.persist(mr);

後:

mrh.merge(mr);

この方法で何かデメリットがあれば教えてください。

于 2013-02-02T07:07:27.823 に答える