JPA @Embeddable和@Embedded
介绍:
作为一个面向对象的开发人员,我们希望避免使用带有大量不相关字段的大型类。 因此,我们可能经常感到有必要使用多个对象来表示JPA实体。
在本快速教程中,我们将学习如何使用JPA或Hibernate中的@Embedded和@Embeddable注释来实现它。
上下文构建:
假设我们有一个人桌 具有以下列:
id|firstName|middleName|lastName|street|city|country|pincode
我们希望将其映射为JPA实体。
在我们的实体类中直接映射这么多属性对于我们开发人员的本能并不那么自然。 同样,更改数据库表结构也不可行。 我们做什么?
首先定义一个PersonName和Address类:
@Embeddable public class PersonName { private String firstName; private String middleName; private String lastName; //constructors, getters, setters ... } @Embeddable public class Address { private String street; private String city; private String country; private String pincode; //constructors, getters, setters ... }
我们已经使用@Embeddable批注标记了这两者,以表示它们将被嵌入到JPA实体中。
最后,我们将使用@Embedded注释嵌入特定类型。
让我们来定义将代表我们的人表我们的Person实体:
@Entity public class Person { @Id @GeneratedValue private Integer id; @Embedded private PersonName name; @Embedded private Address address; //constructor, getters, setters ... }
我们在这里使用@Embedded批注来表示这些对象将被嵌入到我们的实体中。 换句话说, 所有这些对象将一起映射到一个人数据库表。
覆盖属性:
当我们有多个实体使用可嵌入对象时,可嵌入对象通常特别方便。
现在让我们说,我们还有另一个表– office :
id|streetAddr|city|country|postcode|...
office表还具有一个Address类型,只是几个字段名称有所不同。
同样,在这里,我们可以使用相同的Address可嵌入对象。 这个想法是使用@AttributeOverrides和@AttributeOverride注解覆盖Address类的street和pincode属性 :
@Entity public class Office { @Id @GeneratedValue private Integer id; @Embedded @AttributeOverrides (value = { @AttributeOverride (name = "street" , column = @Column (name = "streetAddr" )), @AttributeOverride (name = "pincode" @AttributeOverride "pincode" , column = @Column , column = (name = "postcode" )) }) private Address address; ... }
这种方法更加简洁,使我们避免在多个实体之间重复使用名称重复的重复字段。
相反,我们可以覆盖可嵌入类型的任何列属性。
结论:
在本教程中,我们探讨了JPA @Emdeddable和@Embedded注解。
成为第一个发表评论的人。
翻译自: https://www.javacodegeeks.com/2020/01/jpa-embeddable-and-embedded.html
JPA @Embeddable和@Embedded相关推荐
- jpa embedded_JPA @Embeddable和@Embedded
jpa embedded 介绍: 作为一个面向对象的开发人员,我们希望避免使用带有大量不相关字段的大型类. 因此,我们可能经常感到有必要使用多个对象来表示JPA实体. 在本快速教程中,我们将学习如何使 ...
- JPA中的@Embedded和@Embeddable注释的使用
JPA中的@Embedded和@Embeddable注释 概念很枯燥, 通过代码理解吧 模拟场景 1.建表,插入一条数据 create table if not exists `User`(`id` ...
- @Embedded 和 @Embeddable
[@Embedded 和 @Embeddable] 指定其值为可嵌入类实例的实体的持久字段或属性.可嵌入类必须标注为Embeddable.@Embedded 用来修饰 对象属性(引用类型-- 类对象- ...
- JPA实现领域驱动设计(DDD) 中值对象的持久化
文章目录 什么是DDD值对象? 实现方式 单一值对象 改变表中映射的字段的名称 根据值对象的单一属性查询或多属性的动态查询 多个值对象 根据值对象的单一属性查询或多属性的动态查询 什么是DDD值对象? ...
- [JavaEE - JPA] 6. ORM的核心注解 - 基础类型以及嵌套类型
本文继续介绍JPA ORM的核心注解中和基础类型映射相关的部分. 基础类型映射 所谓的基础类型映射,实际上就是Java中定义的数据类型应该如何被JDBC转换成数据库所支持的数据类型.而这些基础类型,主 ...
- Spring Boot JPA 2.7.2
icon: edit date: 2022-01-02 category: CategoryA tag: tag A tag B star: true Spring Boot JPA 2.7.2 项目 ...
- 领域驱动设计战术模式--值对象
值对象虽然经常被掩盖在实体的阴影之下,但它却是非常重要的 DDD 概念. 值对象不具有身份,它纯粹用于描述实体的特性.处理不具有身份的值对象是很容易的,尤其是不变性与可组合性是支持易用性的两个特征. ...
- Hibernate 马士兵 学习笔记
1. HelloWorld a) Xml b) Annotction 2. Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3 ...
- hibernate学习笔记(总结)
hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...
最新文章
- 3维线程格 gpu_图形处理单元(GPU)
- 爬虫_微信小程序社区教程(crawlspider)
- windows远程连接ubuntu 黑屏_Windows跟Windows远程连接传输文件
- 【MFC系列-第19天】初步认识GDI绘图技术
- 模拟网页行为之实践四
- python自动化控制_python用于自动化控制编程
- 百度前端学院-基础学院-第二课
- 0x3a能否作为c语言常量,C语言编程遇到了宏定义的问题,求解答,万分感谢
- 【Anychart】自动保存flash图片到指定目录下。
- EtherCAT总线伺服速度控制功能块(H5U PLC)
- 其他综合-fdisk一键分区操作-无需脚本
- that、this、these、those的区别
- 游戏的初级体验,三围:视、听、触的展示
- OPENGL回归原点
- 谈谈百度直达号的服务价值
- Vmware虚拟机如何与主机共享文件夹
- python|爬虫|爬取豆瓣自己账号下的观影记录并可视化
- android马达测试,技术科普丨马达测试知多少?
- 后台弹出页面或模式窗口
- 磁盘分区的4K对齐(转载)
热门文章
- 【LCT】Tree II(luogu 1501)
- 分布式 | Dubbo 架构设计详解
- 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross)
- 数据结构(三)之单链表反向查找
- 将编号为0和1的两个栈存放于一个数组空间V[m]中。
- 捡到东西说给钱才给东西?算不算敲诈勒索……
- 2017 年编程语言排行榜:Python 排第一
- 使用JDBCTemplate实现与Spring结合,方法公用
- Redis(案例一:注册登录-图形验证码+谷歌开源Kaptcha)
- 搜索时展示的是名字,传给后端的是id