人与身份证的实体关系图
最后生成表关系图
下面来看具体代码的实现。
实体类实现:
public class Person { privateintid;
private Stringname;
private IdCardidCard;//关联对象 …省略get,set方法 } | public class IdCard {
privateintid;
private StringcardNo; …省略get,set方法 } |
看一下映射文件
Person.hbm.xml <hibernate-mapping> <classname="com.bjpowernode.hibernate.Person"table="t_person"> <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <!--多对一关联,但是后面加一个unique唯一的限定,则确保了关联字段取值的唯一性 --> <many-to-onename="idCard"unique="true"/> </class> </hibernate-mapping> | IdCard.hbm.xml <hibernate-mapping> <classname="com.bjpowernode.hibernate.IdCard"table="t_idCard"> <idname="id"> <generatorclass="native"/> </id> <propertyname="cardNo"/> </class> </hibernate-mapping>
|
普通的实体类映射。从上面可以看出,一对一唯一外键映射的重点就是Person一端的many-to-one标签的设定。同一对一主键关联映射一样,看完单向之后,我们来看一下一对一唯一外键映射的双向关联。同样拿人与身份证进行举例。
实体类实现:
public class Person { privateintid;
private Stringname;
private IdCardidCard;//关联属性 …省略get,set方法 } | public class IdCard {
privateintid;
private StringcardNo;
private Personperson;//关联属性 …省略get,set方法 } |
对应的映射文件:
Person.hbm.xml <hibernate-mapping> <classname="com.bjpowernode.hibernate.Person"table="t_person"> <idname="id"> <generatorclass="native"/> </id> <propertyname="name"/> <many-to-onename="idCard"unique="true"/> </class> </hibernate-mapping>
| IdCard.hbm.xml <hibernate-mapping> <class name="com.bjpowernode.hibernate.IdCard"table="t_idCard"> <idname="id"> <generatorclass="native"/> </id> <propertyname="cardNo"/> <!--property-ref为关系字段的名称 --> <one-to-onename="person"property-ref="idCard"/> </class> </hibernate-mapping> |
一对一唯一外键关联映射双向采用<one-to-one>标签映射,而且是必须指定。这也是在映射文件的实现上他们唯一的区别。
到现在为止,我们说了一对多,多对一,一对一,那剩下的估计大家也知道了。就是多对多。我们将在下一篇博客中介绍。