【问题标题】:JPA Criteria Set/List not usable as PluralAttribute to make a PredicateJPA Criteria Set/List 不能用作 PluralAttribute 来制作谓词
【发布时间】:2014-11-13 12:20:07
【问题描述】:

我有一个实体类 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&lt;X,Y&gt; cannot be converted to PluralAttribute&lt;X,C,E&gt;))

当我查看元模型时,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)) 并从 Set 更改为 List。

这是否可行,或者是否有替代方法来检查对象是否出现在 JPA Criteria 查询的集合中?

【问题讨论】:

    标签: java hibernate jpa criteria-api


    【解决方案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 where x_.item_id=?

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 2015-01-14
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2016-06-23
      • 2015-05-10
      相关资源
      最近更新 更多