我有以下实体,并想寻求有关如何从关系双方查询选定属性的帮助。这是我的模型。假设所有表都在数据库中正确创建。我使用的 JPA 提供程序是 Hibernate。
@Entity
public class Book{
@Id
private long id;
@Column(nullable = false)
private String ISBNCode;
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY, optional = false)
private Person<Author> author;
@ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY, optional = true)
private Person<Borrower> borrower;
}
@Inheritance
@DiscriminatorColumn(name = "personType")
public abstract class Person<T>{
@Id
private long id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Info information;
}
@Entity
@DiscriminatorValue(PersonType.Author)
public class Author extends Person<Author> {
private long copiesSold;
}
@Entity
@DiscriminatorValue(PersonType.Borrower)
public class Borrower extends Person<Borrower> {
.....
}
@Entity
public class Info {
@Id
private long id;
@Column(nullable=false)
private String firstName;
@Column(nullable=false)
private String lastName;
......;
}
如您所见, book 表与不可为空的 Person 和可空的 Person 具有多对一关系。
我需要以表格格式显示以下内容 -
ISBNCode - First Name - Last Name - Person Type
如何编写一个 JPA 查询,让我只选择我想要的属性。我想从 Book 中获取属性 ISBN 代码,然后从与 Person 对象相关的 Info 对象中获取名字和姓氏,而后者又与 Book 对象相关。我不想从 Info 对象中获取所有信息,只对选定的信息感兴趣,例如在这种情况下的名字和姓氏。
请注意,Borrower 和 Book 之间的关系标记为 optional=true,这意味着可能有一本书可能还没有被某人借过(显然它有一个作者)。