我有一个实体类X,它有一个Y实体的集合。
X
@ManyToMany
private List<Y> items = new ArrayList<>();
我试图制定一个JPA条件查询限制来测试集合中是否存在Y的实例。
X entity = ...; // Some instance
Predicate p = criteriaBuilder.isMember(entity, subRoot.get(X_.items))
给我一个错误:
(argument mismatch; ListAttribute<X,Y> cannot be converted to PluralAttribute<X,C,E>))
当我查看元模型时,List属性是这样的:
public static volatile ListAttribute<X, Y> items;
转到ListAttribute定义:
public interface ListAttribute<X extends Object, E extends Object>
extends PluralAttribute<X, List<E>, E> {
我已尝试投放criteriaBuilder.isMember(entity, (PluralAttribute)subRoot.get(X_.items))
并从设置更改为列表。
这是否可行或是否有其他方法可以检查对象是否出现在JPA Criteria查询的集合中?
答案 0 :(得分:1)
我们使用了加入。
Join join = root.join(root.get(X_.items);
query.where(criteriaBuilder.equal(root.get(X_.items), entity))
输出是这样的:
从X x中选择x _。* 内连接X_Item item_ on x_.id = item_.X_id其中x_.item_id =?