临摹 2012-09-20 16:45
浏览 194

ssh框架中ManyToOne,One的一方被更新报错的问题?

----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 sysUsers = new HashSet(0);
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "sysDept")
public Set getSysUsers() {
return this.sysUsers;
}

----页面中是这样映射到action中的model(即user):

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

ACTION中用了prepare(),在action中会首先根据id取得user对象,然后在把页面form里面的值赋给user。

可是更新user时,如果改变部门,就是FORM中“model.sysDept.id”的值改变,就会报
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,所以报错了。

如何解决?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 蓝牙耳机怎么查看日志
    • ¥15 Fluent齿轮搅油
    • ¥15 八爪鱼爬数据为什么自己停了
    • ¥15 交替优化波束形成和ris反射角使保密速率最大化
    • ¥15 树莓派与pix飞控通信
    • ¥15 自动转发微信群信息到另外一个微信群
    • ¥15 outlook无法配置成功
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏