当前位置: 代码迷 >> J2EE >> 异常:org.hibernate.LazyInitializationException
  详细解决方案

异常:org.hibernate.LazyInitializationException

热度:288   发布时间:2016-04-22 03:17:22.0
hibernate多对一查询问题.请教高手
我现在数据库有两个表:
petInfo-----宠物信息(pet_ID是PK)
petDiary-----宠物日记(diary_pet_id是PK,同时petInfo的pet_ID是外键)
每个宠物可以写多个日记,也就是说每条宠物信息可以有多条日记信息跟它对应.

本人想在查询一条日记信息的时候同时查询出相对应的宠物信息.对应关系要怎么配置啊?
我是这样配置的,但是查询不出来对应的宠物信息
我的JAVABEAN都是自动生成的应该不会有错,对应关系也是自动生成的
<many-to-one name="petInfo" class="com.hch.hib.pojo.PetInfo" column="diary_pet_id" />


求高手解救我啊!!!!!!!!!

------解决方案--------------------
petDiary映射文件里加入:
<many-to-one name="petInfo"/>
petInfo的映射文件:
<set name="petDiary">
<key column="pdid"/>
<one-to-many class="com.moon.model.PetInfo"/>
</set>
------解决方案--------------------
<set name="petDiaries" inverse="true"> 
<key> 
<column name="diary_pet_id" /> 
</key> 
<one-to-many class="com.hch.hib.pojo.PetInfo" /> 
</set> 

------解决方案--------------------
根据日记信息查询宠物信息配置了many-to-one就可以了.
那么在petDiary的BEAN中就有属性 private PetInfo petInfo;生成get set方法
String hql="select * from petDiary where PetDiary.id='"+id+"'";
List list = this.find(hql);//执行查询
PetInfo petInfo = list.get(0).getPetInfo();//返回PetInfo对象
petInfo就是你要获取的宠物信息了.

以上只是给楼主一个获取信息的方法,没有严格的去写,只是个思路.


------解决方案--------------------
ding
------解决方案--------------------
ding
------解决方案--------------------
..........1种方法 是控制好你的sql 语句 不要把你的查询结果封装在宠物日记的对象里 hibernate 支持各种结果的封装 我习惯放在list里

第2种方法 主要是你的结果要显示在什么地方 这种情况主要注意延迟加载就好了 映射部分不需要太复杂你的可以了
在你的日记对象中 应该有个属性叫宠物 然后get 那个宠物就有信息了
------解决方案--------------------
在PefInfo中是否有日记属性
private Set diary=new HashSet();
在PetDiary中时候有PetInfo 的对象
private PetInfo pet=new PetInfo ();

如果都有的话 再看报什么异常

异常:org.hibernate.LazyInitializationException
描述:failed to lazily initialize a collection of role: com.pet.entity.Pet.diary, no session or session was closed
原因:配置有问题,把hibernate里面的那个:.hbm.xml文件中,配置lazy=false; 这是由于lazy而产生的错误, 
<set name="diary" lazy="false">
<key column="diary_pet_id" />
<one-to-many class="com.hch.hib.pojo.PetDiary"/>
</set>

异常:org.hibernate.exception.SQLGrammarException
描述:could not initialize a collection: [com.pet.entity.Pet.diary#1]
原因:Sql语句有误,配置文件中的列名错 你再把SQL语句输出来下 看看有什么错误

------解决方案--------------------
ding
  相关解决方案