Hibernate 异常:object references an unsaved transient instance - save the transient instance before fl
2012-12-26 14:52
411 查看
hibernate中级联操作,当存储一个对象时,报错Hibernate 异常:object references an unsaved transient instance - save the transient instance before fl
次在网上查阅资料,解决的方法是在主控方的 set 标签上把 cascade 属性修改为"save-update" 即可。
而 cascade 属性如何使用呢?以下是该属性的值。
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。(默认值)
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
由于默认使用的是 none ,所以当主表级联更新子表时,主表处于瞬时状态,因此需要将其设置为"save-update"(这句话是推测)。
但是我的不想这么麻烦的级联操作。
所以当attentionDao.insert(attention);的时候,首先要持久化attention中关联的user。
所以会产生insert into user的语句,先保存user。
而user的主键生成策略是
<id name="userID" column="userID" type="long">
<generator class="native"></generator>
</id>
所以即使取出来的user中userID不为空,也会重新附一个值,根据数据库自增长
这样就不是之前的self或者attentioner的userID了,会改变
要取出来的user就是数据库中已有ID的user,可以将主键生成策略改成assgined,这样持久化user的时候,
会去一次user,发现跟已有的self或者attentioner值未改变,因为不会去insert,保存。
次在网上查阅资料,解决的方法是在主控方的 set 标签上把 cascade 属性修改为"save-update" 即可。
而 cascade 属性如何使用呢?以下是该属性的值。
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。(默认值)
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
由于默认使用的是 none ,所以当主表级联更新子表时,主表处于瞬时状态,因此需要将其设置为"save-update"(这句话是推测)。
但是我的不想这么麻烦的级联操作。
@Test @Rollback(false) public void insert(){//T entity long selfID=0; long attentionerID=1; User self=(User) userDao.get(selfID); User attentioner=(User) userDao.get(attentionerID); Attention attention=new Attention(); attention.setSelf(self); attention.setAttentioner(attentioner); attention.setCreateTime(new Date()); attentionDao.insert(attention); }主要是由于user取出来之后,其实session已经关闭,此时user已经变成游离态。
所以当attentionDao.insert(attention);的时候,首先要持久化attention中关联的user。
所以会产生insert into user的语句,先保存user。
而user的主键生成策略是
<id name="userID" column="userID" type="long">
<generator class="native"></generator>
</id>
所以即使取出来的user中userID不为空,也会重新附一个值,根据数据库自增长
这样就不是之前的self或者attentioner的userID了,会改变
要取出来的user就是数据库中已有ID的user,可以将主键生成策略改成assgined,这样持久化user的时候,
会去一次user,发现跟已有的self或者attentioner值未改变,因为不会去insert,保存。
相关文章推荐
- Hibernate 异常:object references an unsaved transient instance - save the transient instance before fl
- hibernate 对象状态异常:object references an unsaved transient instance - save the transient instance before flushing
- hibernate 对象状态异常:object references an unsaved transient instance - save the transient instance before flushing
- Hibernate 异常:object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing(异常总结)
- hibernate 对象状态异常:object references an unsaved transient instance - save the transient instance befor
- Hibernate中的级联策略和object references an unsaved transient instance - save the transient instance before
- hibernate 对象状态异常:object references an unsaved transient instance - save the transient instance befor
- object references an unsaved transient instance - save the transient instance before flushing(异常总结)
- object references an unsaved transient instance - save the transient instance before flushing异常问题处理
- 问题:object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing
- 解决 object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing: com.i
- object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing
- object references an unsaved transient instance - save the transient instance before flushing: com.jspxcms.core.domain.ScTeam
- object references an unsaved transient instance - save the transient instance before flushing