2013-11-20 28 views
0

我儘量讓namedQuery:NamedQuery首先選擇列表中

@NamedQuery(name = "Interval.findByMemoryType", 
    query = "select i from Interval i JOIN i.intervalDatas id " 
    + "where id.fragments.memoryType = :memoryType") 

我的問題是,該片段是片段的列表。我只對列表中第一個元素的內存類型感興趣。

所以我應該有這樣的事情:

@NamedQuery(name = "Interval.findByMemoryType", 
    query = "select i from Interval i JOIN i.intervalDatas id " 
    + "(select first(id.fragments)) as fid) where fid.memoryType = :memoryType") 

但是我總是得到「查詢包含錯誤的結局」的問題。

有人能幫助我嗎?

+0

我沒有注意到第一個JPA函數,子查詢分配應該放在查詢的select部分,而不是在join中。由於連接不是確定性的,我不知道只檢查片段列表中的第一個片段有什麼價值。你不想要任何引用具有某種記憶類型的片段的時間間隔嗎? – Chris

回答

0

可以採取的第一個結果:

TypedQuery<Interval> q = em.createQuery ("Interval.findByMemoryType", Interval.class); 
q.setParameter("memoryType", memoryType);//+other parameters if you have 
Interval interval = q.getSingleResult(); 

小缺點是,它可以裝載其所有intervalDatas(取決於映射)。另請檢查the documentation以瞭解可能的例外情況。

相關問題