2009-08-31 78 views
3

我有一個JPA實體類似於;使用JPA查詢部分實體

public class Inventory { 
private String productname; 
private String manufacturer; 
private Float retailprice; 
private Integer unitssold; 
private String ourcomment; 
} 

在約2出5個查詢我需要整個實體,但剩下的時間我興趣unitssoldourcomment

做一個查詢和獲得一個大的結果列表,但只需要3/5的信息,這感覺很浪費。我想稍微優化一下,我有一個預感,這可以使用繼承來完成。

但是如何?

回答

4

繼承?即使假設你有一個實際的域實體,它由你的列表中的前三個字段組成,並且Inventory可能會擴展它,但你對該實體所做的任何查詢都將不可避免地加載所有字段(通過連接if映射到不同的表)由於隱式多態性。

您可以做的是將第4個和第5個屬性映射爲「懶惰」; JPA提供者,必須使用字節碼測試,以便能夠做到這一點:

@Basic(fetch = FetchType.LAZY) 
private Integer unitssold; 

@Basic(fetch = FetchType.LAZY) 
private String ourcomment; 

你必須指定在您需要獲取的一切疑問fetch all properties;其他人在第一次訪問之前不會檢索屬性值。老實說,這種方法只有在你的查詢返回大型結果集並且「懶惰」屬性本身很大時才值得(例如,我不會爲Integer單獨做; String可能是可行的,如果它可以得到長)

0

也許你可以嘗試將另一個實體映射到同一個表,並將其標記爲只讀。