hibernate常见级联操作异常及解决方法

来源:互联网 发布:中国巡航导弹 知乎 编辑:程序博客网 时间:2024/06/05 08:14

异常1:not-null property references a null or transient value

   解决方法:将“一对多”关系中的“一”方,not-null设置为false

(参考资料:http://www.thearcmind.com/confluence/pages/viewpage.action?pageId=212)

异常2:org.hibernate.TransientObjectException: object references an unsaved transient instance
  解决方法:cascade="save-update,persist"
(参考资料:http://www.laliluna.de/254.html)

异常3:org.hibernate.QueryException: could not resolve property

 解决方法:"from Category category where category.userID = :userID"修改为"from Category category whereuserID = :userID"或者"from Category category where category.user.id = :userID"

(参考资料:http://www.laliluna.de/277.html)


异常4:could not initialize proxy - the owning Session was closed
  解决方法:设置lazy为false
(参考资料:http://forum.springframework.org/showthread.php?t=27993)


异常2我在应用中碰到了这样的问题:

有三个表:userInfo   deptmentInfo   role

userInfo 与deptmentInfo为many to one

userInfo 与role为many to one

下面为保存UserInfo对象时的代码:

    DeptmentInfo dept = new DeptmentInfo();
     dept.setDeptName(deptName);

    Role role = new Role();
     role.setRoleName(roleName);

    UserInfo user = new UserInfo();
     user.setUserName(userName);
     user.setUserSex(userSex);
     user.setDuty(duty);
     user.setPhone(phone);
     user.setMobileNum(mobileNum);
     user.setEmail(email);
     user.setQq(qq);
     user.setMsn(msn);
     user.setAdress(adress);
     user.setDeptmentInfo(dept);
     user.setRole(role);

    dao.save(user);

执行时有错:org.hibernate.TransientObjectException: object references an unsaved transient instance

于是改了UserInfo.hbm.xml的一些地方

如下:

<many-to-one name="role" class="com.oa.domain.Role"
    cascade="save-update,persist" fetch="select">
     <column name="ROLE_ID" precision="22" scale="0" />
    </many-to-one>
    <many-to-one name="deptmentInfo"
     class="com.oa.domain.DeptmentInfo" cascade="save-update,persist"
    fetch="select">
     <column name="DEPT_ID" precision="22" scale="0" />
    </many-to-one>

加了上面红色部分,就OK了,能保存了。