私は(簡体字)、以下の問題が持っている:1対1でentityManager.remove()を呼び出すときにHibernateは参照されたエンティティを削除しますか?
@Entity
public class Membership {
private User user;
@ManyToOne(cascade = CascadeType.ALL)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
...と、以下の対応するクラス:私は多対1の関係で実体を持って
を-many側:
@Entity
public class User extends Person {
private Set<Membership> memberships = new HashSet<Membership>();
@OneToMany(mappedBy = "user", cascade = { CascadeType.MERGE,
CascadeType.REMOVE, CascadeType.REFRESH })
public Set<Membership> getMemberships() {
return memberships;
}
public void setMemberships(Set<Membership> memberships) {
this.memberships = memberships;
}
}
私はnew
経由user1
というユーザーや会員mem1
を作成し、このようにそれらをリンクした:
mem1.setUser(user1);
user1.getMemberships().add(mem1);
は、私はこのようにそれらを永続化しています:
entityManager.getTransaction().begin();
entityManager.persist(user1);
entityManager.persist(mem1);
entityManager.getTransaction().commit();
は今、私はメンバーシップを削除したいです。だから私は呼ん:
entityManager.remove(mem1);
...私はMembership
側にUser
側cascade=CascadeType.REMOVE
とcascade=CascadeType.ALL
を設定したリコール。しかし、参照番号mem1
はuser1
から自動的に削除されません。すなわち、user1.getMemberships()
はまだmem1
を保持しています!これは正しい動作ですか?エンティティをデータベースから削除するとき、JPAはオブジェクトから参照を自動的に削除しませんか?
これは疑問に思えるかもしれませんが、私はJPAの初心者です。注釈があなたにとって何の役目を果たしているか正確に見ることは難しい場合もあります。