Hibernate/JPA中@OneToOne和@MapsId的使用

栏目: Hibernate · 发布时间: 6年前

内容简介:双向@OneToOne的效率低于与父表共享主键的单向@OneToOne。因此,不要使用双向@OneToOne,最好是依靠单向@OneToOne和@MapsId。第一步:在子实体这边使用@MapsId基本上,上面@OneToOne关联,它将与父表共享主键,父实体见如下,父实体中没有@OneToOne,这说明是从子实体指向父实体的单向关联:

双向@OneToOne的效率低于与父表共享主键的单向@OneToOne。因此,不要使用双向@OneToOne,最好是依靠单向@OneToOne和@MapsId。

第一步:在子实体这边使用@MapsId

@Entity
<b>public</b> <b>class</b> Desk implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    @Id    
    <b>private</b> Long id;

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId    
    <b>private</b> Employee employee;

基本上,上面@OneToOne关联,它将与父表共享主键,父实体见如下,父实体中没有@OneToOne,这说明是从子实体指向父实体的单向关联:

@Entity
<b>public</b> <b>class</b> Employee implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    <b>private</b> Long id;

    <b>private</b> String name;

    <b>public</b> Long getId() {
        <b>return</b> id;
    }

    <b>public</b> <b>void</b> setId(Long id) {
        <b>this</b>.id = id;
    }

    <b>public</b> String getName() {
        <b>return</b> name;
    }

    <b>public</b> <b>void</b> setName(String name) {
        <b>this</b>.name = name;
    }            
}

源代码可以在 这里 找到  。

如果使用DDD聚合设计,Desk和Employee谁是聚合根?无论谁是聚合根,都是聚合根实体要指向引用子实体,这时会与JPA的设计有冲突,需要权衡业务设计和性能的平衡。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web信息架构(第3版)

Web信息架构(第3版)

[美] Peter Morville、Louis Rosenfeld / 陈建勋 / 电子工业出版社 / 2013-10 / 99.00元

本书内容涵盖了信息架构基本原理和实践应用的方方面面。全书共7个部分,包括信息架构概述、信息架构的基本原理、信息架构的开发流程和方法论、信息架构实践、信息架构与组织、两个案例研究,以及参考资料清单。 本书兼具较高的理论价值和实用价值,曾被Web设计领域多本书籍重点推荐,是信息架构领域公认的经典书籍,不论新手还是专家都能各取所需。本书可供Web设计与开发者、Web架构师、网站管理者及信息管理相关......一起来看看 《Web信息架构(第3版)》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具