2016-12-14 34 views
0

使用NamedNativeQuery時可以設置一個namedEntityGraph嗎?如何使用namedNativeQuery指定entityGraph?

我獲取用戶實體如下:

try { 
    return (User) em.createNamedQuery("OAuthToken.getUser") 
      .setParameter("token", accessToken) 
      .setParameter("expirationInterval", expirationInterval) 
      .setHint("javax.persistence.fetchgraph", "User.withProjectsMemberOf") 
      .getSingleResult(); 
} catch (NoResultException e) { 
    return null; 
} 

entityGraph:

@NamedEntityGraphs({ 
    @NamedEntityGraph(name = "User.withProjectsMemberOf", 
      attributeNodes = @NamedAttributeNode("projectsMemberOf")), 
}) 

但是我收到以下警告:

的javax.persistence.fetchgraph提示設置,但價值不是EntityGraph!

那麼有可能使用命名的本機查詢來設置實體圖嗎?

我目前正在爲過濾器中的當前REST請求設置用戶。我希望能夠根據匹配的資源方法上存在的註釋爲用戶動態獲取entityGraph。

我使用的彈簧數據的JPA,Hibernate和球衣

+0

您將實體圖的名稱指定爲「User.withProjectsMemberOf」,但將fetchgraph稱爲「User.withMemberProjects」。 –

+0

@NeilStockton良好的捕獲,但我仍然得到相同的錯誤 – rodney757

回答

0

您需要實例化EntityGraph,這樣

EntityGraph myEG = em.getEntityGraph("User.withProjectsMemberOf"); 

,然後設置fetchgraph,這樣

query.setHint("javax.persistence.fetchgraph", myEG); 
+1

固定的警告,但現在我得到:java.lang.ClassCastException:org.hibernate.internal.SQLQueryImpl不能轉換爲org.hibernate.internal。 QueryImpl。有任何想法嗎? – rodney757

+0

將您的實際代碼和堆棧跟蹤發佈到哪裏。如果是用於標準的JPA API調用,並且Hibernate拋出了它,那麼這是您JPA提供程序中的一個錯誤,您應該對它們提出錯誤 –