0
我有以下實體,並希望尋求關於如何從關係的兩側查詢選定屬性的幫助。這是我的模型。假設所有表都在數據庫中正確創建。我正在使用的JPA提供程序是Hibernate。JPA查詢多對一可空關係
@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;
......;
}
正如您所看到的,書籍表格與不可爲空的Person以及可爲空的Person之間存在多對一的關係。
我有一個要求來展示,以表格的形式如下 -
ISBNCode - First Name - Last Name - Person Type
我如何寫一個JPA的查詢,讓我只選擇屬性,我想。我想從Book中獲取屬性ISBN代碼,然後從Info對象中獲取與Person對象相關的名字,這些對象又與Book對象相關。我不想從Info對象獲取所有信息,只關心選定的信息,例如在這種情況下的名字和姓氏。
請注意,借款人和圖書之間的關係標記爲optional = true,這意味着可能有一本書可能還沒有被某人借過(顯然它有一個作者)。