【问题标题】:JPQL: Field path cannot be resolved to a collection typeJPQL:字段路径无法解析为集合类型
【发布时间】:2014-01-20 11:27:23
【问题描述】:

我正在尝试根据用户可以选择的可能日期列表来搜索日期。使用日历,我要求用户输入一个日期,然后我想在他们的“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 本身在其自动完成中建议我使用它。

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

【问题讨论】:

    标签: jpa jpql


    【解决方案1】:

    in 运算符不能用于集合。它应该用于作为参数传递给查询的值列表或子选择。

    您可能正在寻找 member of 运算符,它测试某个参数是否是集合的一部分:

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

    【讨论】:

    • 谢谢,我应该检查一下那个操作员。我找到了一个使用子查询的替代解决方案,它做同样的事情,但你给我看的操作员绝对是一个更干净的选择。我会更新我的代码!谢谢!
    猜你喜欢
    • 2016-02-26
    • 2013-12-02
    • 2015-04-15
    • 2017-08-25
    • 1970-01-01
    • 2015-09-16
    • 2015-04-21
    • 2018-03-30
    • 2019-08-18
    相关资源
    最近更新 更多