2014-06-17 21 views
0

我怎樣才能得到所有詩篇其不在接收機usedVersed屬性的所有實體?(JPQL)獲取其不在@OneToMany屬性

想是這樣

@NamedQuery(name="unusedVersesByReceiver", query="SELECT v.id FROM Verse v WHERE v.id 
NOT IN (SELECT r.usedVerses FROM Receiver r WHERE r = :_receiver)" 

,但我得到:

The state field path 'r.usedVerses' cannot be resolved to a collection typ 

這裏我的課:

class Verse{ 
private Long Id; 
private String SomeText; 
... 
} 
class Receiver{ 
private Long Id; 
@OneToMany 
private List<Verse> usedVerses; 
... 
} 

更新:我改變了我的實體類:

class Verse{ 
private Long Id; 
private String SomeText; 
@OneToMany 
private User usedBy; 
... 
} 


class Receiver{ 
private Long Id; 
... 
} 

並試用了此JPQL

@NamedQuery(name = "testUnusedVerses", query= "SELECT v.id FROM Verse v WHERE v.usedBy 
!= :_receiver") 

沒有錯誤,也沒有一個正確的解決方案。沒有用戶被檢索。

回答

0

嘗試只是v,不v.id和使用,而不是NOT MEMBER OFNOT IN

SELECT v.id FROM Verse v, Receiver r 
    WHERE v NOT MEMBER OF r.usedVerses 
    AND r = :_receiver 
+0

失敗仍然包括。 另外簡單'@NamedQuery(名稱= 「testUnusedVerses」,查詢= 「SELECT r.usedVerses來自接收機R,其中R =:_receiver」)'代碼返回相同的錯誤。 –

+0

如何用'嘗試「選擇r.usedVerses VS來自接收機R,其中R =?_receiver' –

+0

是不是名後''r.usedVerses'不vs'只是標識錯誤依然存在 –

0

你不能選擇表示集合,它是與usedVerses時的屬性,你必須加入您的收藏屬性,爲其分配一個別名,該別名將引用該集合中的項目,然後您可以選擇該別名。 在你的情況下,它會是: 從接收器r選擇uv加入r.usedVerses uv其中r =:_receiver

+0

那是工作,但我已經寫了,我需要這些都是詩** **不能在usedVersed列表。 –