Criteria API 错误:运算符不存在:整数 = 整数[]

问题描述 投票:0回答:1

我有一个实体,其中有一个整数数组类型的字段。

class User { 
    @ElementCollection
    @Column(name = "`location_ids`", columnDefinition = "int[]")
    @Type(ListArrayType.class)
    private List<Integer> locationIds;

    @Column(name = "`email`")
    private String email;

    @Column(name = "`deletedAt`")
    @Temporal(TIMESTAMP)
    private LocalDateTime deletedAt;

}

我想使用 criteria API 将请求的 locationIds 列表与现有数组进行比较。例如,我想检查位置 id 1,2 或 3 是否是“locationIds”数组列的一部分。

final List<Predicate> predicates = new ArrayList<>();

predicates.add(criteriaBuilder.equal(root.get("email"), email));
predicates.add(criteriaBuilder.isNull(root.get("deletedAt")));

List<Predicate> arrayPredicates = new ArrayList<>();
final Expression<List<Integer>> exp = root.get("locationIds");
for (Integer id : locationIdsFromSearchModel) {
     arrayPredicates.add(criteriaBuilder.isMember(id, exp));
}
predicates.add(criteriaBuilder.or(arrayPredicates.toArray(new Predicate[0])));

调用抛出错误 “运算符不存在:整数 = 整数[]”

criteriaBuilder.isMember(id, exp)

我抬头一看,似乎我需要对数组进行“任何”操作。我没有找到任何关于如何使用 Criteria API 执行此操作的参考。

java jpa criteria hibernate-criteria
1个回答
0
投票

isMember
不适用于数组 - 它适用于元素集合 - 存储在单独的表中。

Hibernate 6 添加了对数组类型的支持,更具体地说,Hibernate 6.4 添加了对某些查询函数的支持:https://in.relation.to/2023/10/26/orm-64cr1/

array_contains()
数组是否包含元素 - 例如array_contains(an.array, 1)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.