java - Spring JPA(Hibernate)自动将嵌套对象展平为单个表

标签 java spring hibernate jpa

我以前知道怎么做,但我这辈子都记不起要用谷歌搜索什么了!我有一堆 POJO,每个 POJO 都有一些简单的字段(基元、字符串等),我只想将它们全部添加到父 POJO 中,并将所有内容作为一行存储在一个表中(无需将子 POJO 中的每个字段复制并复制到父 POJO 中)。我相信有一个注释,或者可能是一个 Hibernate 转换器,我可以使用它们非常轻松地完成此操作?

举个例子,假设我有:

class A {
  Integer foo;
  String bar;
}
class B {
  Integer lol;
  String rofl;
}

我想要一个像这样的父对象:

@Entity
class P {
  A a;
  B b;
}

它将有一个数据库模式 foo,bar,lol,rofl

非常感谢任何帮助!

最佳答案

我认为您有 2 个类,它们具有一些共同的属性。所以你想创建另一个应该与这些类一起使用但不会映射到数据库中任何特定表的公共(public)类(我的意思是这个公共(public)类将存在/将仅在应用程序级别处理)。就像考虑 2 类学生和教师一样,具有一些共同的属性,如姓名、性别等。因此现在可以将这些共同属性推送到一个共同的类中,例如人类。所以如果是这样的话,不如做这样的事情:

@Embeddable
public class Human{
    private String name;
    private String gender;

    //Constructors, getters & setters
}

现在创建一个特定的类,比如 Student

public class Student{

    @Embedded
    private Human human;
    private String rollNo;
    //....
    //Constructors, getters & setters
}

Teacher 类也是如此。

现在您可以像这样保存这些条目:

Human human = new Human();
human.setName("your-name");
//....

Student student = new Student();
student.setHuman(human);
student.setRollNo("343");
//....

然后像这样保存

studentRepository.save(student);

所以在数据库中,Student(name, gender, rollNo ...) 只会保存一条记录。因为在这种情况下,Human只是Student参数的组合,并不是一个实体。

关于java - Spring JPA(Hibernate)自动将嵌套对象展平为单个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45838399/

相关文章:

java - 发送 ObjectOutputStream 时出现 EOFException

java - 如何将 int 数组作为单个 3 位输入读取?

java - 为什么使用 Swing BoxLayout 缩进对象

java - 带有 Thymeleaf 的 IntelliJ (2018.3) - 静态内容路径上没有自动完成?

java - mappedBy 引用了一个未知的目标实体属性

java - ActionListener 只计算鼠标左键单击

java - InternalResourceViewResolver 与 UrlBasedViewResolver 有什么不同

java - 500 Internal Server Error 而不是 Spring Boot 中的 404

java - hibernate :未设置方言。设置属性 hibernate.dialect

java - 用于动态表创建的 hibernate