一、主键关联

1、两个实体对象的主键一样,以表明它们之间的一一对应关系;

2、不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值。

Person.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liang.hibernate">
<class name="Person" table="t_person">
<id name="id">
<!-- 采用foreign生成策略,forgeign会取得另外一个关联对象的标识 -->
<generator class="foreign" >
<param name="property">idCard</param>
</generator>
</id>
<property name="name"></property>
<!--
one-to-one指示hibernate如何加载其关联对象,默认根据主键加载
也就是拿到关系字段值,根据对端的主键来加载关联对象 constrained="true"表示约束,当前主键(person的主键)还是一个外键
参照了对端的主键(IdCard的主键),也就是会生成外键约束语句
-->
<!-- idCard属性,表达的是本对象与IdCard的一对一关系。 -->
<one-to-one name="idCard" class="IdCard" constrained="true"></one-to-one>
</class>
</hibernate-mapping>

  

二、唯一外键关联

1、两个实体对象用一个外键来关联,以表表明对象之间的关系。

2、其实它是多对一关联映射的特例,多的一端加上唯一的限制之后,用来表示一对一的关联关系。

Person.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liang.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="native" ></generator>
</id>
<property name="name"></property>
<!-- 由于它是一对一的唯一外键关联,它是多对一关联的特例,注释可以直接写成多对一关联-->
<!-- idCard属性,表达的是本对象与IdCard的多对一关系。 -->
     <!-- 采用<mang-to-one>标签来映射,指定多的一端unique为true,  
      这样就限制了多的一端的多重性为一,就是这样来映射的。 
      -->
    <many-to-one name="idCard" class="IdCard" column="idCardId" unique="true"></many-to-one>
    </class>
</hibernate-mapping>

  

最新文章

  1. 在 Windows7 上按照 MySQL5.7
  2. 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象
  3. Struts2 JQuery UI常用插件
  4. [Architecture Pattern] Factory Builder
  5. tornado框架之路三之ajax
  6. Entity Framework with NOLOCK
  7. Mysql笔记——DQL
  8. windows 查看某个端口号被占用情况
  9. 2015第23周四HTML特殊字符显示问题
  10. 信息熵(Entropy)究竟是用来衡量什么的?
  11. MyEclipse-Initializing Java Tooling问题
  12. vue.js移动端app实战3:从一个购物车入门vuex
  13. 在ASP.NET Core中构建路由的5种方法
  14. java matlab 混合编程 Failed to find the required library mclmcrrt9_2.dll on java.library.path.
  15. 对C语言指针的理解
  16. ASP.NET MVC4添加区域视图 找到多个与名为“home”的控制器匹配的类型
  17. 用原型封装一个操作DOM的例子
  18. [CF1038F]Wrap Around[AC自动机+dp]
  19. JAVA_返回一个数值的相反数的几种方式.
  20. xshell评估过期解决办法

热门文章

  1. 2017年0406------如何使用sessionStroage来储存参数是对象的,以及localStorage和sessionStorage的不同地方
  2. Android热修复、插件化、组件化
  3. luogu P3210 [HNOI2010]取石头游戏
  4. java中的进制转换
  5. React-native 底部导航栏(二)
  6. js数组与对象的区别
  7. 简单Delphi程序设计
  8. 五、vue中export和export default的使用
  9. nova计算服务分布式
  10. python socket使用