我的代码中有两个表(用户和工作)之间的@ManyToMany 关系,如下所示:
...
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "USER_WORK", joinColumns = {
@JoinColumn(name = "USER_ID") }, inverseJoinColumns = {
@JoinColumn(name = "WORK_ID")
})
@Cascade({CascadeType.ALL})
private Set<Work> works;
...
当我想影响用户的新工作时,请执行以下代码:
...
addWorkToUser(Work work,Integer idUser){
User user = new User();
user.setId(idUser);
Set<Work> worksList = new HashSet<Work>();
worksList.add(work);
user.setWorks(worksList);
getHibernateTemplate().saveOrUpdate(User)
}
...
问题是当我第一次影响一项新工作时,一切都很顺利。但是当我影响同一个用户的新炒锅时,我只看到最后一个工作!当我调试代码时,我发现了一个删除查询。我怎样才能跳过这个删除查询?
Hibernate: update User set name=? where id=?
Hibernate: delete from USER_WORK where USER_ID=?
Hibernate: insert into USER_WORK (USER_ID, WORK_ID) values (?, ?)
编辑:
我通过手动执行解决了这个问题,但我仍在寻找最佳解决方案:(
User User = (User) DataAccessUtils
.singleResult((getHibernateTemplate().find(
"From User WHERE id = ?", idUser)));
User.getWorks().add(work);
getHibernateTemplate().saveOrUpdate(User);