请假设我们的数据库中有两个表:
人员
id,名字,姓氏,titleid(是title.id的缩写)
标题
id,name
现在,我们需要在Spring Boot项目中使用jparepository类的实体或Java类:
人员
id,名字,姓氏,titleid, titleName (可能是@transient ?!) 在我们的人员实体中,字段id,名字,姓氏,titleid映射到人员表 并且titleName映射到标题表。
第一个问题:我们需要使用一个联合查询(在一个查询中)向我们的实体加载,但是所有保存,删除查询都像往常一样针对个人表。这怎么可能? 第二个问题是如何编写命名查询并在jparepository中使用它来仅加载id和firstname而忽略其他字段?
谢谢
答案 0 :(得分:0)
使用@OneToOne映射
因此在您的人员课程中使用
@OneToOne 私人标题标题;
答案 1 :(得分:0)
您可以使用@Table
和@SecondaryTable
批注将两个表都映射到Person实体。我在此written Hibernate Tip和this video中对此进行了详细说明。
此映射需要两个简单的步骤:
@Table
来注释您的实体,
@SecondaryTable
注释,并提供第一个和第二个的名称
第二个表作为名称参数的值。您还可以在这两个表之间指定连接列。@Column
注释,并将辅助表的名称设置为
table属性的值。根据问题中提到的表格,您的映射应如下所示:
@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;
...
}