2017-06-21 100 views
0

我有一個實體具有很多屬性,裏面的關係。在少數情況下,我只需要2個簡單的屬性,而不是其他的。我試着用實體的圖形,但我總是得到完整的記錄,讓所有attributs,關係...Java加載實體部分與JPA 2.1和@ManyToOne上的休眠

在我EECase實體的實體圖:

@NamedQueries({ 
    @NamedQuery(name = EECase.QUERY_ALLCASES, query = "SELECT DISTINCT c FROM EECase c") 
}) 

@NamedEntityGraph(name = "Case.forDropdown", attributeNodes = { 
    @NamedAttributeNode("caseNumber"), 
    @NamedAttributeNode("firstNames"), 
    @NamedAttributeNode("lastName") 
}) 

在我的豆我試圖讓過濾的情況:

public List<EECase> getCasesForDropdown() { 
    TypedQuery<EECase> query = getManager().createNamedQuery(EECase.QUERY_ALLCASES, EECase.class); 

    EntityGraph<EECase> graph = (EntityGraph<EECase>) getManager().getEntityGraph("Case.forDropdown"); 
    query.setHint("javax.persistence.fetchgraph", graph); 

    List<EECase> queryEntity = (List<EECase>) query.getResultList(); 
    return queryEntity; 
} 

看來setHint被忽略了嗎?

回答

1

即使你定義了一個提示,它仍然是一個可選的東西。

我會建議在選擇是一個投影結果類的形式小的替代(建議選擇,如果你不打算隨後更新的實體):

@NamedQueries({ 
    @NamedQuery(name = EECase.QUERY_ALLCASES 
    , query = "SELECT new com.domain.EECase(c.caseNumber, c.firstName, c.lastName) 
       FROM EECase c") 
}) 

牢記地方一個合適的構造函數來接受給定順序的投影列。

您還可以使用單獨的POJO來映射該查詢的結果。不一定是實體類本身。

還要記住,你將無法選擇整個依賴實體..只有普通屬性(我認爲是這種情況)。

+0

適當的構造函數可以正常工作,非常感謝。 – Sven