您的位置:首页 > 其它

2013年一二月份寒假SSH项目——Hibernate常见异常

2013-01-26 01:01 411 查看
异常1:ids for this class must be manually assigned before calling save()

id列不是自动生成,而你的id不允许为空造成的

<generator class="assigned">这样设置设置hibernate就认为id不需要它来指定,把设置id的权限交给了你。而你在不能为空的地方设置null....

改成下面

<id name="subjectId" type="integer">

<column name="subject_id" />

<generator class="identity" />

</id>

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

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

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

异常3:org.hibernate.TransientObjectException: object references an unsaved transient instance

解决方法:cascade="save-update,persist"

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

异常4: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)

异常5: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了,能保存了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: