日期:2014-05-17  浏览次数:20865 次

ssh框架hibernate更新user表为什么级联更新dept表?
USER表中有dept对象,每个user对应一个dept,user表中dept配置如下:
private SysDept sysDept;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "deptID", nullable = false)
public SysDept getSysDept() {
  return this.sysDept;
}
dept表中user内容配置如下:
private Set<SysUser> sysUsers = new HashSet<SysUser>(0);
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "sysDept")
public Set<SysUser> getSysUsers() {
  return this.sysUsers;
}

页面中是这样映射到action中的model(即user):
<input type="hidden" id="id" name="model.sysDept.id" value="${(model.sysDept.id)! }">

DAO层更新的方法
public <T> void saveOrUpdate(Object entity) {
  getHibernateTemplate().saveOrUpdate(entity);
}

可是更新user时,如果改变部门,就会报
org.hibernate.HibernateException: identifier of an instance of com.sys.model.SysDept was altered from 6 to 8
好像就是说我把user从dept id=6的部门改到 id=8的部门时,hibernate还去试图更新dept表的id,所以报错了。


如何解决

------解决方案--------------------
cascade = CascadeType.ALL 改一下
------解决方案--------------------
数据库里有没有使用触发器?
------解决方案--------------------
级联更新和casecade和inverse这两个属性有关 建议全部删除再试试