2014-02-11 132 views
0

在sql中,您可以輕鬆地從整個表中選擇幾列。你如何在JPA中實現這樣的事情? 這實際上並不是我的主要問題。它更像是一個設計。JPA檢索部分對象

比方說,我有一個父對象與一些信息字段和子對象的集合字段與一對多連接。

@Entity 
@Table(name = "code") 
public class CodeList extends Code { 

     /** The code list's values. */ 
     @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) 
     @JoinColumn(name = "codeListId") 
     private List<CodeValue> codeValues; 


     /** The code list's display type. */ 
     @Column(length = 255, name = "DISPLAY_TYPE") 
     private String displayType; 
.... 

我試圖實現使用JPA(休眠)和JAX-RS,但如果我想我的服務能夠檢索代碼表(的顯示類型),或者僅僅是收集的僅僅是信息的REST服務codeValues沒有任何額外的性能檢修(使對象無效)或從數據庫中檢索我不需要的額外數據?

回答

1

默認@OneToMany關係是懶惰。

簡單值:

SELECT c.displayType FROM CodeList c WHERE c.id=:id 

關係

SELECT v FROM CodeList c LEFT JOIN c.codeValues v WHERE c.id=:id 
1

使用JPQL確定要檢索哪些值。

select e.displayType from CodeList e 

OR

select e from CodeList d left join fetch d.codeValues e 
+0

我認爲這不會與 '取' 關鍵字工作。當我們試圖檢索父實體時,我們使用'fetch'(在這種情況下爲d)。你能證實嗎? –

+0

由於onetoMany很懶,我使用fetch來爲它帶來價值。獲取獲取懶惰屬性(集合與否)的值。 – Koitoer