博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate中的Entity类之间的OneToOne关联
阅读量:4179 次
发布时间:2019-05-26

本文共 3175 字,大约阅读时间需要 10 分钟。

Hibernate中的Entity类之间的OneToOne关联也存在单向关联和双向关联两种形式。

OneToOne关联的两个Entity类是完全对等的,任何一方都可以是这种关联的子类(owning side),而另一方是父类(reverse side)。

1. 双向关联

在OneToOne关联的两个Entity类中,选择一个作为子实体类(owning side),其对应的表中设置外键;另一个作为父实体类(inverse side)并设置mappedBy="..."关联属性。

父Entity类定义如下:

@Entity(name = "Phone")public static class Phone {    @Id    @GeneratedValue    private Long id;    private String number;    @OneToOne(mappedBy = "phone", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)    private PhoneDetails details;    public Phone() {    }    public Phone(String number) {        this.number = number;    }    public Long getId() {        return id;    }    public String getNumber() {        return number;    }    public PhoneDetails getDetails() {        return details;    }    public void addDetails(PhoneDetails details) {        details.setPhone( this );        this.details = details;    }    public void removeDetails() {        if ( details != null ) {            details.setPhone( null );            this.details = null;        }    }}

子Entity类定义如下:

@Entity(name = "PhoneDetails")public static class PhoneDetails {    @Id    @GeneratedValue    private Long id;    private String provider;    private String technology;    @OneToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "phone_id")    private Phone phone;    public PhoneDetails() {    }    public PhoneDetails(String provider, String technology) {        this.provider = provider;        this.technology = technology;    }    public String getProvider() {        return provider;    }    public String getTechnology() {        return technology;    }    public void setTechnology(String technology) {        this.technology = technology;    }    public Phone getPhone() {        return phone;    }    public void setPhone(Phone phone) {        this.phone = phone;    }}
在这种双向关联中,Hibernate自动为子实体类(owning side)中的外键属性设置UNIQUE约束。如果违反了该约束,则在访问父实体类时会抛出
org.hibernate.HibernateException
异常。

2. 单向关联

在OneToOne单向关联中,只需在子实体类(owning side)设置关联,只需在子实体类(owning side)对应的表中设置外键。

父Entity类定义如下:

@Entity(name = "PhoneDetails")public static class PhoneDetails {    @Id    @GeneratedValue    private Long id;    private String provider;    private String technology;    public PhoneDetails() {    }    public PhoneDetails(String provider, String technology) {        this.provider = provider;        this.technology = technology;    }    public String getProvider() {        return provider;    }    public String getTechnology() {        return technology;    }    public void setTechnology(String technology) {        this.technology = technology;    }}

子Entity类定义如下:

@Entity(name = "Phone")public static class Phone {    @Id    @GeneratedValue    private Long id;    private String number;    @OneToOne    @JoinColumn(name = "details_id")    private PhoneDetails details;    public Phone() {    }    public Phone(String number) {        this.number = number;    }    public Long getId() {        return id;    }    public String getNumber() {        return number;    }    public PhoneDetails getDetails() {        return details;    }    public void setDetails(PhoneDetails details) {        this.details = details;    }}

转载地址:http://onlai.baihongyu.com/

你可能感兴趣的文章
SQL关键字执行顺序
查看>>
设计模式--适配器模式
查看>>
SpringMvc注解之@ControllerAdvice
查看>>
SQL--查询两个字段相同的记录
查看>>
多研究些架构,少谈些框架(1) -- 论微服务架构的核心概念
查看>>
多研究些架构,少谈些框架(2)-- 微服务和充血模型
查看>>
多研究些架构,少谈些框架(3)-- 微服务和事件驱动
查看>>
SQL性能优化梳理
查看>>
微服务架构技术栈
查看>>
想面试进BAT,不得不看的分布式锁,面试题都在这里了!!
查看>>
Redis最常被问到知识点总结
查看>>
这才是微服务拆分的正确姿势,值得学习!
查看>>
MySQL中一条SQL是如何执行的?
查看>>
MySQL的索引是什么?怎么优化?
查看>>
2万字长文包教包会 JVM 内存结构
查看>>
不懂 spring 就彻底放弃 Java 吧!
查看>>
从MySQL高可用架构看高可用架构设计
查看>>
可以秒杀全场的SpringCloud微服务电商实战项目,文档贼全!
查看>>
java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
查看>>
java架构之路(多线程)AQS之ReetrantLock显示锁的使用和底层源码解读
查看>>