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

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

内容简介:双向@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的设计有冲突,需要权衡业务设计和性能的平衡。


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

查看所有标签

猜你喜欢:

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

网页配色实用手册

网页配色实用手册

温鑫工作室 / 科学 / 2011-9 / 59.00元

《网页配色实用手册》在日常生活中,色彩早已广泛地深入到人们的精神生活和物质生活中,它是一种能够激发情感、刺激感官的重要元素。《网页配色实用手册》 从色彩的应用范围和网页设计行业需求出发而编写。全书共分为9章,第1章~第2章主要介绍色彩的基础知识、网页与多媒体的相关知识,帮助读者掌握最基本的理论;第3章主要介绍明度、纯度以及色彩感觉的配色,引领读者深入学习;第4章~第8章分别根据网站的属性、网站的地......一起来看看 《网页配色实用手册》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具