JPA @Embeddable和@Embedded

介绍:

作为一个面向对象的开发人员,我们希望避免使用带有大量不相关字段的大型类。 因此,我们可能经常感到有必要使用多个对象来表示JPA实体。

在本快速教程中,我们将学习如何使用JPA或Hibernate中的@Embedded@Embeddable注释来实现它

上下文构建:

假设我们有一个  具有以下列:

 id|firstName|middleName|lastName|street|city|country|pincode 

我们希望将其映射为JPA实体。

在我们的实体类中直接映射这么多属性对于我们开发人员的本能并不那么自然。 同样,更改数据库表结构也不可行。 我们做什么?

首先定义一个PersonNameAddress类:

 @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类的streetpincode属性

 @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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android monitor不能查看/data目录

问题 在android 7.0虚拟机上不能查看/data目录 解决 1. 修改目录权限 开始->cmd->adb shell->chmod -R 777 /data 2. root虚拟机 先执行 adb root,再执行 adb remount 出现remount succeeded表示可以了

Sqlite error- INSERT failed: datatype mismatch

问题 sqlite3 使用.import命令导入输入出现error-INSERT failed: datatype mismatch 原因 文件字段的默认分隔符为“|”,而从excel转换的.csv文件默认为逗号,所以导致文件解析出错,进而 “数据类型不匹配” 解决 在.import命令前修改分隔…

反射-获取java私有内部类反射类型、私有字段

获取JAVA私有内部类反射类型 方式一 Class.forName(“外部类完整路径$内部私有类类名”); 方式二 通过获取对应私有内部类的字段而获取 完整的类名 Class.forName(field.getType().getName()) 获取JAVA私有字段 Class.forName(“类完整路径”).getDelcaredField(“字段名…

javafx透明边框_JavaFX技巧6:使用透明颜色

javafx透明边框为用户界面元素选择正确的颜色始终是一个很大的挑战,但是当您开发可重用的框架控件时,开发人员就无法控制使用它们的应用程序的外观和感觉,这甚至更具挑战性。 尽管您可能总是将元素添加到默认的灰色背景之上,但是嵌…

android-创建sdcard

进入sdk 安装路径 tools目录下 mksdcard 100M D:\dxfSDCard.img //创建一个100M的sdcard

Apache Ivy 2.5.0发布

本周,我们发布了Apache Ivy的 2.5.0版本。 Apache Ivy是与Apache Ant构建工具集成的构建依赖项管理器。 可以照常从https://ant.apache.org/ivy/download.cgi下载该下载。 该2.5.0版本是在Ivy发行版中存在很大差距之后发布的。 2.4.0于2014年12月26日发布。此后&am…

android: a system image must be selected to continmue

问题:如题 原因: 没有对应的镜像文件 解决 android studio 进入setting -> appearance behavior -> system setting -> android sdk 下载对应的镜像文件即可

win10 更新 英特尔显示器音频 后显示器音箱没有声音

问题 如题,win10系统更新后显示器音箱没有声音,且右击桌面声音查看播放设备 (说明:这是在解决问题之后截的图,没解决前,只有一个“扬声器/听筒”,原先是存在BenQ LCD的) 解决过…

unity ppr_智能自动PPR更改事件策略

unity pprADF开发人员普遍认为,将迭代器绑定更改事件策略设置为ppr在性能方面不是一件好事,因为此策略会强制框架刷新每个请求上绑定到此迭代器的所有属性绑定。 这不是真的! 框架仅刷新在请求期间已更改的属性和依赖于已更改属性的属性。 …

onenote创建快速笔记--此分区尚不可用,它是从其他设备添加的,该设备同步后才将可用

问题如题 解决 【文件】→【选项】->【保存和备份】 ->【修改】-> 选择新的分区存放快速笔记 图文并茂请参见:https://blog.sina.com.cn/s/blog_7012320d0102wsmw.html 其他: 同步不能连接服务器 解决该问题时,出现同步不成功&…

用Java匹配模式

如果您使用的是Java,那么您之前很有可能会看到其模式匹配。 String#matches(String)方法在内部使用Pattern类型,该类型包含更复杂的功能: 通过编译正则表达式来创建Pattern 。 该模式与任何输入字符串匹配,并且可以选择查找捕获组…

gradle-com.android.build.api.transform.TransformException:Error while generating the main dex list

问题 What went wrong: Execution failed for task >’:app:transformClassesWithMultidexlistForYm10000016Release’. com.android.build.api.transform.TransformException: Error while generating the main dex list. 原因 MultiDex未做初始化 解决 在application的…

Devc++- 源文件未编译”

问题:如题 解决: 删除D:\Software\DEV-CPP\Libexec\gcc\mingw32\3.4.2\目录中的collect2.exe(最好修改名称或备份一下)

如何构建一个Maven插件

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 由于其插件生态系统的普及,Apache Maven仍然是Java领域中最流行的构建工具。 很容易找到一个现有的插件来…

devc++ 运行时黑屏一闪而过

解决 return 0;前 写getchar();或者 system("pause");

java word批注_创建自己的Java批注

java word批注如果您一直在用Java编程并且使用诸如Spring和Hibernate之类的任何流行框架,那么您应该对使用注释非常熟悉。 当使用现有框架时,其注释通常就足够了。 但是,您是否发现需要创建自己的注释? 不久之前,我找…

东芝硬盘插入台式机后滴滴响

问题:如题 个人解决: 插入到主机背后的USB接口,前置的USB可能供电不足

使用JUnit 5进行Spring Boot测试

JUnit 5 (JUnit Jupiter)已经存在了相当长的一段时间,并且配备了许多功能。 但令人意外JUnit 5它不是一个默认的测试库相关,当涉及到春节开机测试入门:它仍然是JUnit 4.12 ,在2014年发布了回来,…

android-ViewPager不能显示

问题 如题 解决 忘了在PageAdapter中的instantiateItem()方法中创建了视图后调用 container.add(view),黑线。。。

AndroidStudio cmakelist找不到问题

这里写自定义目录标题AndroidStudio cmakelist找不到问题原因解决AndroidStudio cmakelist找不到问题 原因 在build.gradle中声明了externalNativeBuild ,但CMakeList.txt并不存在 externalNativeBuild { cmake { path “CMakeLists.txt” } } 解决 把external…