hibernate基础_7
2008-02-23 09:47:16来源:互联网 阅读 ()
同一对多映射相对应,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才可以联级存储成功(在我的机器上是这样的),这样局限性太大了吧。肯定是我哪里没弄好,还请了解的达人给我留个言,解答一下。
上一篇: JSP中文乱码问题的解决
下一篇: J2EE项目危机【翻译】 -避免这10项J2EE危机来确保你的企业JAVA项目成功
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash