Hibernate 将一个实体映射到多个表

Hibernate 将一个实体映射到多个表,hibernate,spring-boot,jpa,spring-data-jpa,Hibernate,Spring Boot,Jpa,Spring Data Jpa,请假设我们的数据库中有两个表: 人 id,firstname,lastname,titleid(是fk到title.id) 标题 id,name 现在,我们希望spring boot项目中有一个实体或java类及其jparepository类: 人 id,firstname,lastname,titleid,titleName(可能是@transient?!) 在person实体中,字段id、firstname、lastname、titleid映射到person表 标题名映射到标题表 第一个问

请假设我们的数据库中有两个表:

id,firstname,lastname,titleid(是fk到title.id)

标题

id,name
现在,我们希望spring boot项目中有一个实体或java类及其jparepository类:

id,firstname,lastname,titleid,titleName(可能是@transient?!) 在person实体中,字段id、firstname、lastname、titleid映射到person表 标题名映射到标题表

第一个问题:我们需要用一个联合查询(在一个查询中)加载实体,但所有保存、删除查询都像往常一样针对person表。这怎么可能? 第二个问题是如何编写一个命名查询,并在我们的jparepository中使用它来只加载id和firstname,而忽略其他字段

谢谢

使用@OneToOne映射

所以在你的个人课上使用

@奥内托内
私人所有权

您可以使用
@Table
@SecondaryTable
注释将两个表映射到Person实体。我在本章和本章中详细解释了这一点

此映射需要两个简单步骤:

  • 您需要使用JPA的
    @Table
    @SecondaryTable
    注释,并提供第一个和第二个表的名称 第二个表作为名称参数的值。还可以指定这两个表之间的联接列
  • 您需要对要映射到辅助表的每个属性进行注释 使用
    @列
    注释,并将辅助表的名称设置为 表属性的值
  • 根据问题中提到的表,映射应如下所示:

    @Entity
    @Table(name = "person")
    @SecondaryTable(name = "title", pkJoinColumns = @PrimaryKeyJoinColumn(name = "titleid", referencedColumnName = "id"))
    public class Person {
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String firstName;
    
        private String lastName;
    
        @Column(table = "title", name = "name")
        private String titleName;
    
        ...
    }
    

    你能分享你所做的吗?这是一个基本的JPA多对一关系。如果你需要这方面的帮助,那么阅读一些基础知识可能是个好主意
    @SecondaryTable
    只能在PK上加入。不管怎样,不管问题的措辞如何,
    @ManyToOne
    是这里需要的,而不是二级表。@据我所知,当表之间有一个映射时,Thorben二级表更可取。@AlanHay这也是一种ManyToOne问题,但有两点:ManyToOne将发出两个查询,而不是一个可以用feteched join,我必须自己将两个结果合并到最终结构中。但我想看看是否有可能有更简单的方法来映射最终数据。这样RESTJSON回复就容易多了。谢谢这很像数据库中的视图,也许使用@Subquery更好。也许我必须创建PersonView类来扩展Person类。我是一个新手,我不确定在hibernate中实现这一点的最佳方法,我感谢您的所有建议