JPQL:字段路径无法解析为集合类型

5
我将尝试根据用户可以选择的一系列日期来搜索日期。通过一个日历,我要求用户输入一个日期,然后我想获取所有可能包含该日期在其“data_possibile”列表中的数据包。
这是我使用的查询:
@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.

这是 p.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在其自动完成中建议了它。

如何编写查询以使其编译通过?

1个回答

5
in操作符不能用于集合。它应该用于作为查询参数传递的值列表或子查询中。
您可能正在寻找member of操作符,它测试某个参数是否是集合的一部分:
select student from Student student where :course member of student.courses

谢谢,我应该检查那个运算符的。 我找到了一个使用子查询的替代方案,它可以做同样的事情,但你向我展示的运算符绝对是更干净的选择。我会更新我的代码!谢谢! - GPhilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接