2014-01-20 38 views
4

我試圖根據用戶可以從中選擇的可能日期列表進行搜索。通過日曆,我要求用戶輸入一個日期,然後我想要在「data_possibile」列表中獲得所有可能的包。JPQL:字段路徑無法解析爲集合類型

這是我使用的查詢:

@NamedQuery(name="pacchettoPreconfigurato.findVendibileByData", query="SELECT p FROM PacchettoPreconfigurato p WHERE p.in_vendita=TRUE AND (:data) IN (p.date_possibili)") 

現在,當我嘗試部署在我得到的服務器日誌的應用程序:

Exception Description: Problem compiling [SELECT p FROM PacchettoPreconfigurato p WHERE p.in_vendita=TRUE AND (:data) IN (p.date_possibili)]. [81, 97] The state field path 'p.date_possibili' cannot be resolved to a collection type. 

這是怎麼頁。 date_possibili定義:

@OneToMany(orphanRemoval=true) 
@JoinColumn(name="id_pp") 
private List<DataPossibilePP> date_possibili; 

其中DataPossibilePP是:

@Entity 
@IdClass(DataPossibilePPPK.class) 
public class DataPossibilePP implements Serializable {  
    @Id 
    private Integer id_pp; 
    @Id 
    private Date data; 
    private static final long serialVersionUID = 1L; 
    /*standard getters and setters*/ 
} 

我不明白爲什麼我被告知該字段不是一個集合,即使它被定義爲一個列表,並且Eclipse本身在其自動完成中將它指示給我。

我該如何編寫查詢以便編譯?

回答

4

in運算符不能用於集合。它應該用在作爲參數傳遞給查詢的值列表上,或者用於子查詢。

你可能尋找member of運營商,如果某些參數是一個集合的一部分測試:

select student from Student student where :course member of student.courses 
+0

謝謝,我應該檢查該操作員。 我發現了一個使用子查詢的替代解決方案,但是您向我展示的操作符絕對是一個更清晰的選項。我會更新我的代碼!謝謝! – GPhilo

+1

+1非常有用的答案。謝謝。 –