Hibernate在更新后从多对多关联表中删除记录
在我的面向团队合作的应用程序中,用户和团队之间存在多对多关系,所以hibernate创建了关联表。问题是,在更新拥有团队的用户后,hibernate会从User_Team表中删除相应的关联记录 用户实体:Hibernate在更新后从多对多关联表中删除记录,hibernate,many-to-many,hibernate-annotations,cascading-deletes,hibernate-cascade,Hibernate,Many To Many,Hibernate Annotations,Cascading Deletes,Hibernate Cascade,在我的面向团队合作的应用程序中,用户和团队之间存在多对多关系,所以hibernate创建了关联表。问题是,在更新拥有团队的用户后,hibernate会从User_Team表中删除相应的关联记录 用户实体: @Entity @Table(name="USERS") public class User extends SelectItem { @Id @Column(name="EMAIL") private String email; @Column(name="PASSWORD") priv
@Entity
@Table(name="USERS")
public class User extends SelectItem {
@Id
@Column(name="EMAIL")
private String email;
@Column(name="PASSWORD")
private String password;
@Column(name="NAME")
private String name;
@Column(name="GROUPNAME")
private String group;
@ManyToMany(
targetEntity=Team.class
)
@ForeignKey(name="FK_TEAM_TO_USER", inverseName = "FK_USER_TO_TEAM")
@JoinTable(
name="USER_TEAM",
joinColumns=@JoinColumn(name="EMAIL"),
inverseJoinColumns=@JoinColumn(name="TEAMNAME")
)
@LazyCollection(LazyCollectionOption.FALSE)
private List<Team> teamList;
@OneToMany(
fetch = FetchType.EAGER,
mappedBy="user")
private List<Invitation> invitationList;
//getters setters
(我知道不应该使用hibernateTemplate,但我认为这不是问题的关键)
而DAO方法只是在事务中由spring服务bean UserServiceImpl调用:
@Transactional(readOnly=false)
public void saveUser(User user){
userDao.saveUser(user);
}
正如您所见,我没有任何级联注释,在更新中,我当然不会更改用户(电子邮件)的主键,所以我不理解这种行为。我使用的是Spring3.1.0.RELEASE和Hibernate3.6.10.Final
感谢您的建议或解释。您不需要任何级联就可以实现这一点。给定用户的联接表的内容由该用户的
teamList
集合的内容确定。因此,如果对团队列表为空的用户调用saveOrUpdate()
,Hibernate将删除该用户的联接表的内容 你说得对。真可惜,我不能从这个角度看问题。非常感谢你的帮助。
public void saveUser(User user){
hibernateTemplate.saveOrUpdate(user);
}
@Transactional(readOnly=false)
public void saveUser(User user){
userDao.saveUser(user);
}