首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2012-10-18 
ssh框架hibernate更新user表为什么级联更新dept表?USER表中有dept对象,每个user对应一个dept,user表中dept

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这两个属性有关 建议全部删除再试试

热点排行