java - 使用 IN 的格式错误的查询

标签 java hibernate postgresql jpa

我有这样的结构:

public enum SaleItemType {
    CRUISE,
    DAILY_HOSTING
}

public class Estimate {
    ...
    private List<SaleItemType> interestedSaleItemTypes;

    @Column(name = "sale_item_type")
    @CollectionTable(name = "estimate_sale_item_type", joinColumns = @JoinColumn(name = "estimate_id"))
    @ElementCollection(targetClass = SaleItemType.class)
    @Enumerated(EnumType.STRING)
    public List<SaleItemType> getInterestedSaleItemTypes() {
        return interestedSaleItemTypes;
    }
}

我正在尝试做一个简单的查询:

String q = "FROM " + Estimate.class.getSimpleName() + " e" + " WHERE e.interestedSaleItemTypes IN :a";
TypedQuery<Estimate> query1 = getEm().createQuery(q, Estimate.class);
query1.setParameter("a", EnumSet.of(SaleItemType.CRUISE));
query1.getResultList();

我在日志中收到此查询(和错误):

DEBUG SQL:92 - select estimate0_.id as id1_25_, estimate0_.average_ticket as average_2_25_, estimate0_.description as descript3_25_, estimate0_.end_date as end_date4_25_, estimate0_.pax_quantity as pax_quan5_25_, estimate0_.start_date as start_da6_25_ from estimate estimate0_ cross join estimate_sale_item_type interested1_ where estimate0_.id=interested1_.estimate_id and (. in (?))

DEBUG SqlExceptionHelper:124 - could not extract ResultSet [n/a] org.postgresql.util.PSQLException: No value specified for parameter 1.

为什么 hibernate 会执行这个查询?

我正在使用 Hibernate 5.1 Final

最佳答案

IN 表达式可用于测试某个值是否在集合中,但 interestedSaleItemTypes 不是一个简单的值,而是一个集合。因此使用MEMBER OF:

String q = "FROM Estimate e WHERE :a MEMBER OF e.interestedSaleItemTypes";
TypedQuery<Estimate> query1 = getEm().createQuery(q, Estimate.class);
query1.setParameter("a", SaleItemType.CRUISE);

关于java - 使用 IN 的格式错误的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36575793/

相关文章:

java - 不确定为什么按钮在 Java FX 中不会彼此相邻对齐

java - 在 TextArea JavaFX 中插入一些彩色线条

java - 将接口(interface)隔离原则应用于服务层接口(interface)

java - Hibernate:奇怪的异常

mysql - NOSQL 数据库的聚合和统计功能

ruby-on-rails-3 - Rails3/jQuery UI Datepicker - 月份和日期在保存时反转

java - java EAR 中的代码签名

java - gethibernatetemplate().save(object) 不持久化数据

java - SessionFactory opensession 抛出空指针异常

macos - -bash : initdb: command not found