【问题标题】:Using field of type ListAttribute of static metamodel in a CriteriaQuery在 CriteriaQuery 中使用静态元模型的 ListAttribute 类型的字段
【发布时间】:2015-01-28 14:11:33
【问题描述】:

我有以下实体

@Entity
@Table(name = "merchants")
public class Merchant implements Serializable {
...
    @ElementCollection
    @CollectionTable(name = "keywords", joinColumns = @JoinColumn(name = "merchant_id"))
    private List<String> keywords;
...
}

有对应的静态元模型

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Merchant.class)
public abstract class Merchant_ {
...
    public static volatile ListAttribute<Merchant, String> keywords;
...
}

如何使用CriteriaBuilder 编写查询以检查keywords 属性是否包含给定值?

【问题讨论】:

    标签: java jpa criteria-api


    【解决方案1】:

    结果很简单

        String keyword = "<KEYWORD>";
    
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Merchant> query = cb.createQuery(Merchant.class);
        Root<Merchant> root = query.from(Merchant.class);
    
        query.select(root).where(
                cb.isMember(keyword, root.get(Merchant_.keywords)));
    
        return em.createQuery(query).getResultList();
    

    但最初的任务是从给定的集合中找到至少包含一个关键字的实体。目前我没有看到任何更好的解决方案,而是将 isMemeber 谓词与 or 子句用于关键字集合中的每个项目。但是,预计它们中的数量并不多。

    但任何更好的解决方案都值得赞赏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多