hibernate基础_7

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

同一对多映射相对应,hibernate也提供多对一的映射。

为了实现多对一映射,我构建了下面两个样例类

public class Resident2 {

private int id;

private String name;

private Room2 room;

}

public class Room2 {

private int roomNum;

private String address;

}

可以看到,这里Resident2同Room2是多对一的关系,而这种关系是通过在每一个Resident2对象中持有一个Room2的引用来实现的。这里,用到的数据表同"hibernate基础_6"中用到的相同。

Room.hbm.xml描述符很简单

<id name= "roomNum" column= "roomNum" unsaved-value= "0" >

<generator class= "increment" />

<!--why must be increment-->

</id>

唯一值得注意的是unsaved-value= "0" 这句,由于要实现联级操作,所以必须得对Room的id赋值。至于为什么赋为0,大家可以参考前面的hibernate基础。

Resident.hbm.xml就比较复杂了

<many-to-one name= "room"

column= "roomNum"

class= "manytoone.Room2"

cascade= "all" />

其实复杂也就是多出了这么一句话。cascade说明我们需要对该映射进行联级操作。至于谁是主操作方,可以通过inverse来说明。这里没有写出,因为狠明显是要操作Resident2来实现对Room2的存储与更新。如果要写,加入inverse= "false" ,即代表Resident2为主操作方。

其他的属性描述就不再冗述了

在客户端,我们如此调用

Room2 r1 = new Room2();

r1.setAddress("minhang.sjtu.D23");

Resident2 res1 = new Resident2();

res1.setId(120);

res1.setName("D");

res1.setRoom(r1);

//res2, res3的声明类似于res1

session.save(res1);

session.save(res2);

session.save(res3);

及实现了联级存储。相信有了"hibernate基础_6"作为参考,这篇文章应该不会很难理解

不过,同"hibernate基础_6",我同样有个问题,就是Room2的id为什么必须是increment才可以联级存储成功(在我的机器上是这样的),这样局限性太大了吧。肯定是我哪里没弄好,还请了解的达人给我留个言,解答一下。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航