Hibernate中的几种经典对象模型和关系模型的映射
?
转自:http://www.blogjava.net/javavle/archive/2011/01/03/342111.html
?
1.many to one 多对一映射
此种模型最经典的为user-->group,即站在user的角度上看,是由多个user对象属于一个group对象。反过来的话,则是一个group对应多个user,那是一对多关系。此种映射一旦建立,能在得到user对象的时候通过对象之间的关系得到group的属性。
类:
User:
private int id;
private String name;
private Group group;
Group:?
private int id;
private String name;
主要映射文件:
<class name="com.vle.domain.User" table="t_user">
??<id name="id">
???<generator column="groupid"/>
?</class>
得到属性值:
User u=(User) session.load(User.class, 1);
System.out.print(u.getName()+"-->"+u.getGroup().getName());
2.one2one 主键关联 单向映射
Person-->IdCard 一个人对应一个身份证,"人"引用了"身份证"的主键作为外键,同时也作为"人"这张表的主键。
Person:?
private int id;
private String name;
private IdCard idCard;
IdCard:
private int id;
private String cardNo;
主要映射文件:
<class name="com.vle.domain.Person" table="t_person">
??<id name="id">
???<!-- 通过foreign得到id生成策略,foreign会得到关联对象的标示 -->
???<generator constrained="true"/>
?</class>
3.one2one 主键关联 双向映射
需要在IdCard对象中加入对Person的引用?
IdCard:
private int id;
private String cardNo;
private Person person;
并且需要在IdCard.hbm.xml中加入对引用的描述:
?<class name="com.vle.domain.IdCard" table="t_idcard">
??<id name="id">
???<generator table="t_person">
??<id name="id">
???<generator unique="true"/>
?</class>
一对一唯一外键关联可以看做多对一的一种特例,只需要在many to one标签中将unique的属性设置为true即可。
5 one2one 唯一外键关联 双向关联
需要在IdCard中持有对Person的引用
private Person person;
IdCard映射文件:
?<one-to-one name="person" property-ref="idCard"/>
将person用一对一标签描述,并且引用了外键idCard。