JPA2.0:删除OneToMany RelationShip中的实体
如何删除OneToMany关系中的实体.
@Entity @NamedQueries({ @NamedQuery(name="User.findByUserNamePassword",query="select c from User c where c.userName = :userName AND c.password = :password") }) @Table(name=""USER"") public class User implements Serializable { @OneToMany(mappedBy="user",cascade=CascadeType.ALL,orphanRemove=true) private List<Profession> professions; public List<Profession> getProfessions() { return professions; } public void setProfessions(List<Profession> professions) { this.professions = professions; } public void addProfession(Profession profession){ if(this.professions == null){ this.professions = new ArrayList<Profession>(); } this.professions.add(profession); profession.setUser(this); } public void removeProfession(Profession profession){ if(this.professions != null){ professions.remove(profession); profession.setUser(null); } } } 内部职业实体 @Entity public class Profession implements Serializable { @ManyToOne @JoinColumn(name="UserId",nullable=false) private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } 然后在我的EJB里面我有这个 @Stateless @LocalBean @TransactionAttribute(TransactionAttributeType.REQUIRED) public class ScholarEJB{ /** * Add a profession to a target user * @param user * @param profession */ public void addProfession(User user,Profession profession){ //Put the user in a managed state. It is important to do this before //adding a new profession onto user user = find(User.class,user.getId()); user.addProfession(profession); this.create(user); //This is persist action } public void removeProfession(User user,user.getId()); user.remove(user); this.update(user); //merge action //this.create(user) //also try this as well,but it does not work } } 现在addProfession工作得很漂亮,但removeProfession不起作用.不知道为什么?请帮忙.我需要驱逐缓存吗? 解决方法
如果职业只是这种关系的一部分,那么你可以保证当一个职业从用户的集合中删除时,它也将通过在关系的OneToMany一侧打开orphanRemoval从数据库中删除.
@OneToMany(mappedBy="user",orphanRemoval=true) private List<Profession> professions; 这就是JPA 2.0规范所述的内容 JPA 2.0规范指出了这一点
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |