当前位置: 代码迷 >> Java Web开发 >> ssh框架hibernate更新user表为啥级联更新dept表
  详细解决方案

ssh框架hibernate更新user表为啥级联更新dept表

热度:2969   发布时间:2013-02-25 21:10:46.0
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这两个属性有关 建议全部删除再试试
  相关解决方案