您现在的位置是:首页 > 正文

hibernate映射文件many-to-one元素属性

2024-04-01 00:24:29阅读 2

many-to-one 元素

属性:

 

  1. name:映射类属性的名字
  2. column:关联的字段
  3. class:关联类的名字
  4. cascade:设置操作中的级联策略 可选值为 all所有操作情况均进行级联、none所有操作情况均不进行级联、save-update执行save和update操作时级联、delete执行删除操作时级联
  5. fetch:设置抓取数据的策略 默认值为select序列选择抓取 可选值为join外连接抓取
  6. update:进行update操作时是否包含此字段
  7. insert:进行insert操作时是否包含此字段
  8. property-ref:指定关联类的一个属性,这个属性将会和本类的外键相对应(当外键参照一键时需要指定改属性)

 

单向N——1 关系 只需从多的一端访问1的一端;

应该在多的一端添加一个属性,改属性引用1端的关联实体;

 

A .-->无连接表的N——1 关联:

直接使用many-to-one 元素 来映射N——1 关联时,hibernate将无须使用连接表,直接使用外键关联策略来处理这种关联映射;

 

eg:

<!-- 用于映射N-1关联实体,指定关联实体类为Address
   指定外键列名为addressId,并指定级联全部操作 -->

  <many-to-one name="address" cascade="all"
   class="Address" column="addressId"/>

 

 

B.-->用连接表的N——1关联:

如果需要使用连接表来映射单向N——1关联,需要显示使用<join.../>该元素强制将一个类的属性映射到多张表中,通常也用于强制使用连接表!

         join元素:

table:指定连接表名;

schema:指定连接表所在的Schema,用于覆盖根元素的default-Schema属性;

catalog:指定连接表所在的Catalog,用于覆盖根元素的default-Catalog属性;

 

 

eg:

 

 

<!-- 使用join元素强制使用连接表 -->
   <join table="person_address" >
        <!-- 映射连接表中参照本表主键的外键列 -->
        <key column="personid"/>
        <!-- 映射连接表中参照关联实体的外键列 -->
        <many-to-one name="address" cascade="all"
                  class="Address" column="addressId"/>

    </join>

 

 

 

 

通过many-to-one 元素,可以定义一种常见的与另一个持久化类的关联。

这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段。

<many-to-one
name="propertyName" (1)
column="column_name" (2)
class="ClassName" (3)
cascade="cascade_style" (4)
fetch="join|select" (5)
update="true|false" (6)
insert="true|false" (6)
property-ref="propertyNameFromAssociatedClass" (7)
access="field|property|ClassName" (8)
unique="true|false" (9)
not-null="true|false" (10)
optimistic-lock="true|false" (11)
lazy="true|proxy|false" (12)
not-found="ignore|exception" (13)
entity-name="EntityName" (14)
node="element-name|@attribute-name|element/@attribute|."
embed-xml="true|false"
/>
(1) name : 属性名。
(2) column   (可选): 外间字段名。它也可以通过嵌套的  <column> 元素指定。
(3) class   (可选 - 默认是通过反射得到属性类型): 关联的类的名字。
(4) cascade(级联)   (可选): 指明哪些操作会从父对象级联到关联的对象。
(5) fetch   (可选 - 默认为  select ): 在外连接抓取(outer-join fetching)和序列选择抓取(sequential select fetching)两者中选择其一。
(6) update, insert   (可选 - defaults to  true ) 指定对应的字段是否包含在用于UPDATE   和/或  INSERT   的SQL语句中。如果二者都是false ,则这是一个纯粹的 “外源性(derived)”关联,它的值是通过映射到同一个(或多个)字段的某些其他属性得到 或者通过trigger(触发器)、或其他程序。
(7) property-ref : (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。 如果没有指定,会使用对方关联类的主键。
(8) access   (可选 - 默认是  property ): Hibernate用来访问属性的策略。
(9) unique   (可选): 使用DDL为外键字段生成一个唯一约束。此外, 这也可以用作property-ref 的目标属性。这使关联同时具有 一对一的效果。
(10) not-null   (可选): 使用DDL为外键字段生成一个非空约束。
(11) optimistic-lock   (可选 - 默认为  true ): 指定这个属性在做更新时是否需要获得乐观锁定(optimistic lock)。 换句话说,它决定这个属性发生脏数据时版本(version)的值是否增长。
(12) lazy   (可选 - 默认为  proxy ): 默认情况下,单点关联是经过代理的。lazy="true" 指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。lazy="false" 指定此关联总是被预先抓取。
(13) not-found   (可选 - 默认为  exception ): 指定外键引用的数据不存在时如何处理:  ignore 会将数据不存在作为关联到一个空对象(null)处理。
(14) entity-name   (optional): 被关联的类的实体名。

cascade 属性设置为除了none 以外任何有意义的值, 它将把特定的操作传播到关联对象中。这个值就代表着Hibernate基本操作的名称,  persist, merge, delete, save-update, evict, replicate, lock, refresh , 以及特别的值delete-orphan all ,并且可以用逗号分隔符 来合并这些操作,例如,cascade="persist,merge,evict"   cascade="all,delete-orphan"

一个典型的简单many-to-one 定义例子:

<many-to-one name="product" class="Product" column="PRODUCT_ID"/>

property-ref 属性只应该用来对付老旧的数据库系统, 可能有外键指向对方关联表的是个非主键字段(但是应该是一个惟一关键字)的情况下。 这是一种十分丑陋的关系模型。比如说,假设Product 类有一个惟一的序列号, 它并不是主键。(unique 属性控制Hibernate通过SchemaExport工具生成DDL的过程。)

<property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>

那么关于OrderItem   的映射可能是:

<many-to-one name="product" property-ref="serialNumber" column="PRODUCT_SERIAL_NUMBER"/>

当然,我们决不鼓励这种用法。

如果被引用的唯一主键由关联实体的多个属性组成,你应该在名称为<properties> 的元素 里面映射所有关联的属性。

网站文章

  • 二维数组、可变长数组、多维数组、函数调用

    二维数组、可变长数组、多维数组、函数调用

    二维数组、可变长数组、多维数组、函数调用

    2024-04-01 00:23:56
  • Software Engineering 课程笔记 -- Reading

    Software Engineering 课程笔记 -- Reading

    Software Engineering 课程笔记 -- Reading1.25-Process, Risk and Scheduling1.27-Measurement2.1-Quality Ass...

    2024-04-01 00:23:48
  • Dubbo常考知识点

    Dubbo常考知识点

    Dubbo中的架构设计是⾮常优秀的,分为了很多层次,并且每层都是可以扩展的,⽐如:1. Proxy服务代理层,⽀持JDK动态代理、javassist等代理机制2. Registry注册中⼼层,⽀持Zo...

    2024-04-01 00:23:19
  • 如何在linux(centos7)虚拟机中搭建Docker?

    如何在linux(centos7)虚拟机中搭建Docker?

    第一步:建立好虚拟机(这就不用讲了吧,大家去找资料,网上很多的)第二步:安装docker :yum install docker遇到y or n全选:y最终结果: 第三步:启动docker 第四步:由...

    2024-04-01 00:23:12
  • 免费国外PHP+MYSQL空间申请

    免费国外PHP+MYSQL空间申请

    这是一个在匈牙利的免费空间,但是在网页上方挂广告条(可以用CSS屏蔽掉). 支持的以下内容管理系统: - Joomla - Wordpress - e107 - Drupal - Simple Machine Forum (SMF) - PHP-Nuke - phpBB - Elxis - MyBB - CMS Made ...

    2024-04-01 00:22:48
  • 微信公众号开发基本流程

    微信公众号开发基本流程

    背景: 过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。 微信公众平台官网:https://mp.weixin.qq.com 文章目录一、注册公众...

    2024-04-01 00:22:40
  • 最强战队实力交锋,算法“视”界杯终极一战即将上演

    最强战队实力交锋,算法“视”界杯终极一战即将上演

    8月16日 14:00,2021腾讯广告算法大赛即将迎来决赛答辩,一场精彩绝伦的算法巅峰对决即将上演。2021腾讯广告算法大赛由腾讯广告主办,腾讯云AI、腾讯大数据、腾讯招聘、腾讯高校合作以及英伟达联...

    2024-04-01 00:22:34
  • JavaScript 函数式编程:从 Immutable.js 到 Redux

    JavaScript 函数式编程:从 Immutable.js 到 Redux

    在 JavaScript 中,函数式编程的流行程度越来越高,而 Immutable.js 和 Redux 是两个在函数式编程中起到重要作用的工具。Redux 的核心概念是单一的状态树,即应用程序的整个...

    2024-04-01 00:22:26
  • [SCOI2018]游泳池(计算几何+分数规划+最大权闭合子图)

    题目链接https://www.luogu.org/problemnew/show/U56187注:题面参考了网上的其他博客,并非原题题面,因此数据范围可能有误。数据为原创数据。题解其实就是许多板子码到一起。首先对于边缘上的任意一点 \(u\),假设离它最远的顶点为 \(A\),那么我们称点 \(u\) 位于顶点 \(A\) 的控制范围之中。我们考虑在没有石雕的情况下怎么求出每...

    2024-04-01 00:22:02
  • 乐信技术支持

    乐信技术支持

    描述:    乐信是实名+匿名社交应用,你可以通过朋友印象建立自己的形象主页,并深入了解每一个你所关心的人,给TA写故事贴标签,同TA聊天互动发现共鸣。快乐沟通就在乐信!简洁大方的界面:...

    2024-04-01 00:21:54