Hibernate 将一个实体映射到多个表
请假设我们的数据库中有两个表: 人 id,firstname,lastname,titleid(是fk到title.id) 标题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,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实体。我在本章和本章中详细解释了这一点
此映射需要两个简单步骤:
@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中实现这一点的最佳方法,我感谢您的所有建议