JPA Criteria Set / List不能用作PluralAttribute来制作谓词

时间:2014-11-13 12:20:08

标签: java hibernate jpa criteria-api

我有一个实体类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查询的集合中?

1 个答案:

答案 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 =?