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

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-orphanall,并且可以用逗号分隔符 来合并这些操作,例如,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>的元素 里面映射所有关联的属性。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值