外键映射

把对象间的关系映射到DB表键的外键引用

  • 对象之间可以通过对象引用来互相直接访问.

  • 运行机制
    • 关键是标识域.

    • 一对一的关联.使用一个DB的外键取代.

    • 一对多的对象集合.
      • 不能在DB中把相连的对象集合都保存了.

      • 必须颠倒引用的方向
        • 一张唱片有多个曲目,那么在曲目表中保存唱片的外键.

      • 更新时较为麻烦
        • 插入和删除
          • 在多的一方(曲目)是依赖映射时(只能被唱片所拥有,而不能被其它处引用).

          • 容易实现.删除与唱片相连的所有曲目,再把唱片中所有当前曲目记录插入进来.

        • 加入一个向后指针
          • 为了让关联双向化.在曲目上加入一个指向唱片的链接.

          • 改变了对象模型,可以以处理单值域的技术来处理更新.

        • 进行一次区分
          • 通过数据库的当前状态区分.
            • 从DB中重读(曲目)对象集合,并与从唱片中读取出的(曲目)集合比较.得出需要删除和保存的新曲目.

          • 通过第一次读取的数据区分.
            • 首次读取后,保存结果集.避免了另一次的DB读取.

            • 但是,当使用了乐观离线锁时,还是需要通过数据库的当前状态来区分.

      • 要加入到对象集合中的项目.
        • 需要首先检查它是否是新对象.如果是,先将其保存到DB中.如果不是,在DB中查找到它,更新其外键值来指向当前的唱片.

      • 移出记录
        • 情况
          • 移到另外的唱片中去了.

          • 已经没有唱片与之对应了.置外键为空.

          • 已经被删除了.

      • 链接中的循环
        • 使用包含完整构造数据的构造方法.并在合适的位置上放置延迟加载来打破循环.

        • 创建空对象,并立刻把它们放到一个标识映射中.当产生循环时,该空对象会被加载,循环会被终止.

  • 使用时机
    • 不适用于多对多的关联.外键是单值的.此时使用关联表映射.

    • 如果关联对象是值对象,那么使用嵌入值.

时间: 2024-10-06 00:53:27

外键映射的相关文章

hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化类的主键生成主键的实体的映射文件 首先需要指定主键生成方式为foreigner 格式为: <id name="departmentId" type="java.lang.Integer"> <column name="department_i

Hibernate(八):基于外键映射的1-1关联关系

背景: 一个部门只有一个一把手,这在程序开发中就会设计数据映射应该设置为一对一关联. 在hibernate代码开发中,实现这个业务有两种方案: 1)基于外键映射的1-1关联: 2)基于主键映射的1-1关联. 本篇文章主要是用来学习如何使用外键实现1-1关联关系. 新建项目hibernate05 新建java project,引入依赖包,在src下添加hibernate.cfg.xml 1 <?xml version="1.0" encoding="UTF-8"

Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信息的外键,这里先做外键. 创建User.java: 用户和身份证一对一的关联关系映射       private IdCart idCart; IdCart.java: 身份证和用户,一对一的关系       private User user; 1 package com.bie.bean; 2

hibernate学习:一对一单向外键映射

一:例子 二:总结 在Husband中 @OneToOne @JoinColumn(name="wifeId") private Wife wife;

[原创]java WEB学习笔记84:Hibernate学习之路-- -映射 一对一关系 ,基外键的方式实现

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

关?于?h?i?b?e?r?n?a?t?e?中?双?向?外?键?关?联?o?n?e?-?t?o?-?o?n?e?的?p?r?o?p?e?r?t?y?-?r?e?f?=?的?问?题(转)

大家都知道hibernate中的one-to-one映射主要有两种策略,(1)一对一主键关联(单向和双向).(2)一对一外键映射(单项和双向).本文主要讲解一下,一对一外键映射中的双向问题,在此前先通过一个实例了解. person和idCard,是一种一对一的关系,其中   t_person表 id        name       idCard(unique) 1         张三 2         王五       1 其中王五是没有idcard,这也符合现实中的,有些人是没有身份证

hibernate 之 关联映射的基于外键的双向一对一关联

1. 人和身份证是一个一对一的关系,他们的表结构为: 2. 类结构:Person.java public class Person { private int id; private String name; private int age; private IdCard idCard; public Person() { } public Person(String name, int age) { super(); this.name = name; this.age = age; } pu

hibernate 之 关联映射的基于外键的单向一对一映射

1. 人和身份证是一个一对一的关系,他们的表结构为: 2. 类结构:IdCard.java : public class IdCard { private String id; private String address; public IdCard() { } public IdCard(String id, String address) { super(); this.id = id; this.address = address; } public String getId() { r

Hibernate关系映射(二) 基于外键的双向一对一

基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 Account.cs,需要添加被控端的引用 package com.lxit.entity; import java.io.Serializable; public class Account implements Serializable{ public Account(){ } private int