JPA,映射实体人,其中包含名称类型的类

Posted

技术标签:

【中文标题】JPA,映射实体人,其中包含名称类型的类【英文标题】:JPA, Map entity Person which contains class of type Name 【发布时间】:2020-04-01 10:51:50 【问题描述】:

我有一个由名称属性组成的实体 Person

@Entity
public class Person 
      // ...
      //@Transient 
       private Name name;
      // ...

我不想将“名称”存储在额外的表中...我将名称标记为瞬态,因此它不会存储在基础数据库中。

我想要的是将属性“name”映射到数据库中的“first_name”和“last_name”列。

例如我可以创建一个像new Person(new Name("John","Doe"));这样的人

如何实现基础表包含两个附加列 first_name 和 last_name 并且内容是我从 name 属性获得的字符串的映射?

基于人员实体的表格应如下所示

id|名字|姓氏 1 |约翰 |能源部 2 |简 |母狗

【问题讨论】:

【参考方案1】:

您可以使用嵌入式:

@Embeddable
public class Name 

    private String firstName;
    private String lastName;

    // getters and setters

然后像这样使用它。

@Entity
public class Person 
      // ...
      private Name name;
      // ...

在 Hibernate 文档中阅读有关可嵌入的更多信息:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#embeddables

【讨论】:

以上是关于JPA,映射实体人,其中包含名称类型的类的主要内容,如果未能解决你的问题,请参考以下文章

JPA多对多映射

JPA 枚举类型映射。最佳方法

JPA criteria 查询:类型安全与面向对象

JPA Map映射

如何使用Spring Data JPA在实体中映射Oracle Object类型?

JPA实体继承实体的映射策略