Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate在更新后从多对多关联表中删除记录_Hibernate_Many To Many_Hibernate Annotations_Cascading Deletes_Hibernate Cascade - Fatal编程技术网

Hibernate在更新后从多对多关联表中删除记录

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

在我的面向团队合作的应用程序中,用户和团队之间存在多对多关系,所以hibernate创建了关联表。问题是,在更新拥有团队的用户后,hibernate会从User_Team表中删除相应的关联记录

用户实体:

@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);
}