2014-09-22 26 views
0

如果你有一個帶有超類和幾個子類的JPA實體設置(見下文),你如何編寫一個JPA查詢來選擇每個子類的前3個(按創建日期排序)?編寫兩個單獨的查詢並詢問特定的子類是否正常工作,但如果可能的話,我想把它歸結爲一個查詢。JPA繼承 - 如何選擇每個子類型的3個實體?

@MappedSuperclass 
public class Parent { 
    @Temporal(TIMESTAMP) 
    @Column(name = "created") 
    private Date created; 
    ... 
} 

@Entity 
@DiscriminatorValue("A") 
public class ChildA extends Parent { 
    ... 
} 

@Entity 
@DiscriminatorValue("B") 
public class ChildB extends Parent { 
    ... 
} 

回答

1

不能使用@MappedSuperclass這個用例(JPA規格):

映射超,不像實體,不可查詢,不能 作爲參數傳遞給EntityManager的或查詢操作進行傳遞。

所以,你的超轉換爲一個抽象的實體:

@Entity 
@Inheritance(strategy=SINGLE_TABLE) 
@NamedQuery(name="queryName", query="SELECT p FROM Parent p ORDER BY p.createdDate DESC, DTYPE(p) ASC") 
public abstract class Parent { 

    @Temporal(TIMESTAMP) 
    private Calendar createdDate; 
}