Hibernate详解(四)---->>关联关系映射(二)
Hibernate详解(四)---->>关联关系映射(二)
?
3、单向一对一
???? 每个中国公民都有一张身份证,这就是典型的一对一关联关系。首先,讨论单向的一对一,即只考虑从公民这一端能找到它的身份证,而身份证这一端不知道公民的存在。
???? 有两种常用的方式可以表示这种一对一关系:基于唯一外键关联方式和基于主键关联方式。
方式一:基于外键关联方式
?
Citizen.java
?
?
IDCard.hbm.xml
?
?
配置文件:hibernate.cfg.xml
?
?
方式二:基于主键关联方式
citizen表和idcard表具有相同的主键。这种实现方式的映射文件如下。?
Citizen.hbm.xml
?
?? 备注:
????? 在这个映射文件中,通过指定标识符生成器为foreign来保证与property属性指定的对象共享同一个OID。使用one-to-one 元素来映射一对一关联。通过constrained=true ,添加了把citizen表的主键链接到idcard表主键的外键约束,即数据库保证citizen表的主键引用有效的idcard表的主键。
?
4、双向一对一
?
???? 单向的一对一关联常用的实现方式有两种:基于唯一外键和基于主键。同样,双向的一对一关联也有这两种常用的实现方式。
方式一:基于外键一对一关联方式?
Citizen.java
?
?
IDCard.hbm.xml
?
?
配置文件:hibernate.cfg.xml
?
方式二:基于主键的双向一对一关联方式
?????? 基于主键的映射方式,指的是一端的主键使用foreign策略来参照另一端的主键来生成,这样两端就具有相同的主键值。当然,关联的任何一端都可以采用foreign策略来生成主键,只是在采用foreign策略生成主键的一端要使用one-to-one 元素映射关联的对象,同时还要添加constrainted=true 属性。而没有使用foreign策略生成主键的那一端就可能直接使用one-to-one 元素来映射关联的对象。具体的映射文件如下:?
? Citizen.hbm.xml
?
?
?
IDCard.hbm.xml
?
??