huangliang00 2013-06-19
问题1:Anassociationfromthetablereferstoanunmappedclass
答案:一般都是包名和类名不对,有的是没有大写,这个问题的贴吧:http://www.blogjava.net/jjshcc/archive/2010/05/12/320705.html
问题2:org.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassignedbeforecallingsave():com.gz.bean.SystemModuleatorg.hibernate.id.Assigned.generat(Assigned.java:56)
答案:出现这个错误的原因有可能因为,你的表中有个主键。但是你插入的(调用save)时那个值是null
你要操作的数据表中的id(即主键)的类型设置成了“自动增长类型”,而在你的
hibernate.cfg.xml中,id的生成方式是assigned,即把主键的生成方式改为native,它的特征是能够根据底层数据库自动选择主键生成方式
问题3:Rememberthatordinalparametersare1-based!
原因是
问题发生的原因是:hql语句里不需要参数,却添加了一个参数,删掉添加参数的语句就可以了!
我的HQL语句:Stringhql="fromUsersasuwhereu.username=‘?’andu.userpassword=‘?’";
Object[]param=newObject[]{“admin”,“000000”};
this.getHibernateTemplate().find(hql,param);
将HQL语句中''中的?没有解析成占位符,确解析成字符串了。
改成如下形式
Stringhql="fromUsersasuwhereu.username=?andu.userpassword=?";
Object[]param=newObject[]{“admin”,“000000”};
this.getHibernateTemplate().find(hql,param);
问题4:Associationreferencesunmappedclass:com.gz.ssh.bean.Positionrights
答案:看与Postionrights相关的类的路路径是不是不对
问题5:当我在页面上删除数据是出现:CouldnotexecuteJDBCbatchupdate
答案:把要操作这个表的配置文件的一对多的级联设置一下就行。最好设置成all,或者id的值设置为唯一,或者有的属性不能为空,而保存的时候没有赋值
问题6:couldnotinitializeproxy-noSession
答案:把<many-to-one>中的lazy="false",把这个变量设置一下就行啦。
问题7:idsforthisclassmustbemanuallyassignedbeforecallingsave()
原因:因为主键生成的方式是assigned,所以主键的值要自己写入,而在保存的时候,没有给主键赋值
答案:给主键赋值
问题8:Norowwiththegivenidentifierexis
原因:在Ostaff类中的配置文件<many-to-onename="ODept"class="com.gz.bean.ODept"fetch="select"lazy="false">
<columnname="DEPTNO"length="16"/>
</many-to-one>没有找到相关联的外键。。。
问题9:CouldnotexecuteJDBCbatchupdate
答案一般都是没有设置级联关系
问题10:adifferentobjectwiththesameidentifiervaluewasalreadyassociated
答案
:在hibernate中同一个session里面有了两个相同标识但是是不同实体。
解决方法一:session.clean()
PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Foundtworepresentationsofsamecollection"异常。
解决方法二:session.refresh(object)
PS:当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。
解决方法三:session.merge(object)
PS:Hibernate里面自带的方法,推荐使用。
2、Foundtworepresentationsofsamecollection
错误原因:见1。
解决方法:session.merge(object)
以上两中异常经常出现在一对多映射和多对多映射中