2014-02-24 31 views
1

我正在開發使用App Engine數據存儲區的應用程序,並且由於多對多關係不受支持,我認爲使用數據庫的其他功能來幫助自己編寫應用程序。App引擎查詢,使用集合上的位置

事實上,我是存儲一個列表,其中包含每個對象內的相關對象的ID,我必須鏈接到另一個表。

注:我正在使用Java和JPA的一切。

這裏的I類使用

@Entity 
public class Book { 
    @Id 
    private Long id; 
    @ElementCollection 
    private List<Long> specsId = new ArrayList<Long>(); 
    // ... getters & setters & other properties 
} 

現在我想查詢數據庫過濾所有這些都在specsId一定值(或特定值的組合)的書籍。

現在我使用Spring來管理到數據庫的連接,所以我有使用entityManager查詢數據庫的DAO和服務。

到目前爲止,我試圖查詢的負載,開始反轉「在」運營商,這顯然沒有奏效

select from Book b where (1, 2) in b.specsId 

或者試圖簡單地用

select from Book b where b.specsId = 1 

,看它是否返回只是其規格中至少有「1」的書,但查詢返回數據存儲區中的每本書。

然後我發現這裏的另一個類似的問題,其建議使用

select from Book b where 1 member of b.specsId 

但只是把錯誤(稱爲b的類書沒有元數據的成員是否確實在提供了正確的成員名稱的查詢?)

所以......有沒有辦法使用手寫查詢或使用javax.persistence.EntityManager提供的功能來做到這一點?

預先感謝您

編輯的建議我也試過

select b from Book b where b.specsId in (list) 

但給我回的書籍表的所有元素

+0

您是否在私人列表中使用了@EllementCollection註釋 specsId,我沒有看到。請讓我知道 – Koitoer

+0

對不起,是的,我忘了寫它!我會馬上更新這個問題! – Luca

+0

許多人支持正常的JPA(無主)關係。 – DataNucleus

回答

0

好吧,我想我會瘋。我想查詢的每一個可能的組合,它的工作是這樣的:

select from Book b where 1 member of specsId 

請注意,在代碼中的唯一的區別我想第一次是,我沒有指定b.specsId但只留下specsId 我仍然不知道它爲什麼會起作用,但不是其他方式(它應該更具體),所以如果有人願意爲我解釋這個神祕的東西,我將非常感激!