0

OneToMany、MnatToOne 関係がある 2 つのテーブルがあります。

AlarmnotifyEmailEntity のインスタンスを alarmnotifyEmailEntityList オブジェクトに追加し、AlarmnotifyEmailConfEntity のインスタンスを更新すると、値が正しくデータベースに保存されます。

しかし、alarmnotifyEmailEntityList の項目の 1 つを削除すると、同じことができませんでした。値が alarmnotifyEmailEntityList から削除されていることは確かですが、この変更がデータベースに反映されていません。

    @Entity(name ="alarmnotify_email_conf")
    @Table(name = "alarmnotify_email_conf")
    public class AlarmnotifyEmailConfEntity implements Serializable {

    @OneToMany(mappedBy = "alarmnotifyEmailConfRef",cascade=CascadeType.ALL)
        private List<AlarmnotifyEmailEntity> alarmnotifyEmailEntityList;

    }//end of Class

    @Entity (name ="alarmnotify_email")
    @Table(name = "alarmnotify_email")
    public class AlarmnotifyEmailEntity implements Serializable {
     @JoinColumn(name = "alarmnotify_email_conf_ref", referencedColumnName = "id")
        @ManyToOne
        private AlarmnotifyEmailConfEntity alarmnotifyEmailConfRef;
    }end of Class

次のステートメントを呼び出して更新するだけです。

JPAManager.getJPAManagerInstance().update(alarmnotifyemailconf);

 public Object update(Object o) {

  try {
     tx.begin();
     EntityManager em = getEntityManager();          
     System.out.println("updating object:" + o);
     o = em.merge(o);
     em.close();
     tx.commit();
     System.out.println("closed and commited merge operation");
     return o;
  }
  catch (Exception e) {
     e.printStackTrace();
  }
  return o;

}

4

2 に答える 2

0

私の経験から、カスケードは同じ操作にのみ適用されました。親を保存すると、子も更新で同じケースを保存します。しかし、子の1つを削除したい場合は、エンティティマネージャーを使用して明示的に削除する必要があり、親をマージして削除を子にカスケードすることを期待することはできません。

于 2013-01-16T12:18:28.053 に答える
0

コレクションから子を削除する jpaで答えを見つけました。その結果、orphanRemoval=trueを追加すると問題が解決しました。

@Entity(name ="alarmnotify_email_conf") @Table(name = "alarmnotify_email_conf") public class AlarmnotifyEmailConfEntity は Serializable を実装します {

@OneToMany(mappedBy = "alarmnotifyEmailConfRef",cascade=CascadeType.ALL , orphanRemoval=true ) プライベート リスト alarmnotifyEmailEntityList;

}//end of Class
于 2013-01-16T15:30:15.857 に答える