2011-11-25 69 views
3

我有以下實體(減少並更名爲這個例子)JPA查詢物存在

@Entity 
public class Case { 

@Id 
private Long id; 


@ManyToOne(optional=false) 
private CourtConfiguration courtConfiguration; 

@ElementCollection(fetch=FetchType.EAGER) 
private List<String> caseNumbers; 

} 

第二實體

@Entity 
public class CourtConfiguration { 

@Id 
private Long id; 

String countyId; 

String referenceId; 

.... 

} 

我試圖用JPQL搜索所有案件有一定的法院配置縣編號,並有caseNumbers包含所有提供的一組重要caseNumbers。

所以我的查詢需要縣ID和一組caseNumbers作爲參數。分別稱爲countyId和importantCaseNumbers。

我已經嘗試過,並沒有得到它的工作。

我的查詢看起來像這樣

String query = "SELECT case FROM Case case JOIN case.caseNumbers caseNumbers WHERE "; 
query  += "case.caseConfiguration.countyId = :countyId "; 

以上位工作,直到我加我caseNumber條件。 我已經嘗試了一個重要的數字foreach重要的數字來延長查詢,一旦重要數字列表超過一個它不起作用。沒有值返回。

for (String importantCaseNum : importantCaseNumbers) { 
    query += " AND '"+importantCaseNum+"' in (caseNumbers)"; 
} 

任何建議/指針讚賞。我想我正在尋找的是case.caseNumbers包含(importantNumbers)子句。

更新我已經恢復到本機SQL爲我的查詢,因爲我不想通過使用HQL綁定自己進入休眠狀態。感謝@soulcheck和@mikko幫助我。我會在休眠JPA修復程序可用時發佈。

感謝 保羅

+0

你是什麼意思「它不工作」。例外?沒有值返回? – soulcheck

+0

沒有值返回 –

+0

你可以發佈你使用foreach的代碼嗎? – soulcheck

回答

1

建立這個JPQL查詢語法正確的方法是用部件構成。但由於HHH-5209中報告的問題,它不適用於Hibernate。此查詢的根據bug報告HQL版本的作品,那麼你的選擇至少包括:

  1. 使用JPQL查詢並切換到別的JPA實現
  2. 使用HQL來代替,而與Hibernate堅持:

    查詢+ =「AND'」+ importantCaseNum +「'in elements(caseNumbers)」;

+0

感謝@Mikko的反饋我很欣賞它,我發現了之前的錯誤報告,希望這個問題將在一個新版本中修復。當我修正我正在觀看錯誤報告以獲取更新時,我會發布它。 –