如何在加载多方数据时同时加载一方数据

08-08-28 wangconghao
banq老师您好:

我目前正在学习SSH,学hibernate时,做的宠物事例中,有宠物信息表petInfo,宠物日记Diary,宠物类别petType,其中,petInfo和Diary存在一对多,petType和petInfo也存在一对多关系,当我在得出宠物列表时,却不能得到petType

代码如下:

实体类

Diary中的字段为:

private Integer diaryId;

private PetInfo petInfo=new PetInfo();

private Date diaryDate;

private String diaryTitle;

private String diaryWeather;

private String diaryContext;

private String diaryIsPublic;

private Date diaryLastModify;

private String diaryAuthor;

private String diaryAuthorEmail;

petInfo中的字段为:

private Integer petId;

private PetType petType;

private String petName;

private String petSex;

private Integer petStrength;

private Integer petCute;

private Integer petLove;

private String petIntro;

private String petOwnerName;

private String petOwnerEmail;

private String petPassword;

private String petPic;

private List diaries = new ArrayList();

petType中的字段为:

private Integer petTypeId;

private String petType;

private List petInfos = new ArrayList();

调 用PetInfoDispatchAction显示宠物列表时,在页面上要显示petType中的petType(宠物类别)

但当我用session.createCriteria(class).add(Example.create(object)).list()得到列表后

却发现其中的petType是空的,导致出错

我有页面是用petInfo.petType.petType来得到宠物类别显示,报错说找不到,而且显示session was closed

加上lazy="false"也没办法,不知道是什么原因?

我的hibernate为3.0版本.

2
banq
2008-08-28 12:48
你需要在petInfo的配置文件中配置 双向的petType关系。

wangconghao
2008-08-28 13:21
是不是在配置文件中写上inverse="true" ?在petType和petInfo中都写上吗?

freebox
2008-08-28 13:44
尽量让关联有方向性,没必要的时候最好不用双向关联。

type只是描述一个pet的,就是说pet载入的时候应该已经拥有了type,如果限定了一个pet只能有一个直接type,应该设置成pet到type的多对一单向关联。fetchtype=join是一定能载入的

猜你喜欢