收集:hibernate中常见问题norowwiththegivenidentifi

收集:hibernate中常见问题norowwiththegivenidentifi

ID:35342511

大小:66.95 KB

页数:8页

时间:2019-03-23

收集:hibernate中常见问题norowwiththegivenidentifi_第1页
收集:hibernate中常见问题norowwiththegivenidentifi_第2页
收集:hibernate中常见问题norowwiththegivenidentifi_第3页
收集:hibernate中常见问题norowwiththegivenidentifi_第4页
收集:hibernate中常见问题norowwiththegivenidentifi_第5页
资源描述:

《收集:hibernate中常见问题norowwiththegivenidentifi》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Hibernate中常见问题Norowwiththegivenidentifierexists问题的原因及解决产牛此问题的原因:有两张表,table!和table2.产牛此问题的原因就是table!里做了关联〈one-to-one〉或者<many-to-oneunique=气rue〃>(特殊的多对一映射,实际就是一对一)来关联table2.当hibernate查找的时候,table2里的数据没有与错.(一句话,就是数据的问题!)tablcl相匹配的,这样就会报Norowwiththegivenidentifier・exists这个假如说,tablel里有自身的主键idl,

2、还有table2的主键id2,这两个字段.如果hibenrate设置的单项关联,即使tablel中的id2为nul1值,table2屮id2屮有值,查询都不会出错.但是如果tablel中的id2字段有值,但是这个值在table2中主键值里并没有,就会报上面的错!如果hibernate是双向关联,那么tablel中的id2为null值,但是table2中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!这就是报这个错的原因了,知道原因了就相应的改就行了•或许还有些人迷惑hibernate关联都配好了,怎么会出现这样的错?其实这是编程的时

3、候岀现的问题,假如说我在添加信息的时候,页面传过来的struts的formbean到dao方法中需要封装成hibernate的po(就是hibenrate的bean),要是一个个po.get(form.set())实在太麻烦了,这样一般都会写个专门的方法来封装,遇到po.get(form,set())这种情况直接把struts的formbcein对象传到此方法屮封装就行了,假如我有个字段是创建人id,那么这个字段是永远不会改的,我在添加的时候还调用这个方法,这个专门封装的方法是有一些判断的,假如说我判断一下,如果遇到创建人id传过来为空值,我判断如果是空值,我把创建人id

4、设为0,但是用户表中userid是主键从1开始自增的,那么这样数据就对应不上了,一查就会出这个错了•这个错在开发刚开始的时候经常发生,因为每个人的模块都是由相应的人独立开发完成以后再整合在一起的,每个人写单独那一块的时候往往会忽略这些,所以整合的时候这些问题往往就都一下子全冒出来了……整合很辛苦,tnnd!hibernate的查询的比较hibernate的查询有很多,Query,find,Criteria,get,loadquery使用hsql语句,可以设置参数是常用的一,种方式criteria的方式,尽量避免了写hql语句,看起来更而向对象了。find方式,这种方式己经

5、被新的hibernate丢弃get和load方式是根据id取得一个记录下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来。1,从返回结果上对比:load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常get方法检索不到的话会返回null2,从检索执行机制上对比:get方法和find方法都是直接从数据库中检索而load方法的执行则比较复杂1,首先查找session的persistentContext中是否有缓存,如果有则直接返冋2,如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记

6、录返回,查不到抛出异常3,如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null4,在访问获得的代理对象的属性吋,检索数据库,如果找到记录则把该记录的对彖复制到代理对彖的target上,并将initialized二true,如果找不到就抛出异常。java」ang」llegalArgumentException:nodetotraversecannotbenull!错误原因:通常此类错误都是由于HQL语句写的不正确,例如from写成了form,或者setA=1andB=2,其中set不同字段用逗号T分离而不是用and.总之

7、仔细检查HQL语句,看看有没有语法错误即可.idsforthisclassmustbemanuallyassignedbeforecallingsave()..org.hibernate.id.IdentifierGenerationException:idsforthisclassmustbemanuallyassignedbeforecallingsave():引起问题的原因:由Hibernate根据数据库表自动生成的”类名.hbm.xml”映射文件引起的。首先我的表(Info)由两个字段组成,即:intid;//主建St

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。