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

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

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


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

查看所有标签

猜你喜欢:

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

细节决定交互设计的成败

细节决定交互设计的成败

张亮 / 2009-3 / 49.00元

《细节决定交互设计的成败》是一本非常实用的有关软件界面的交互设计和可用性设计方面知识的书籍,通过采用一问一答的形式,你将会有针对性地学习到一些能够很快应用在自己软件开发工作中的细节知识和诀窍。例如,如何减轻用户的等待感,如何预防和减少用户的使用错误等。另外,你会发现阅读《细节决定交互设计的成败》时会非常轻松和愉悦;这是由于《细节决定交互设计的成败》写作上的两个特点:第一,采用较多日常生活中的例子来......一起来看看 《细节决定交互设计的成败》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器