gpt4 book ai didi

java - 在 CriteriaQuery 中使用静态元模型的 ListAttribute 类型的字段

转载 作者:行者123 更新时间:2023-12-05 07:57:26 24 4
gpt4 key购买 nike

我有以下实体

@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 属性是否包含给定值?

最佳答案

事实证明这很简单

    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 子句结合起来。然而,并没有像预期的那样多。

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

关于java - 在 CriteriaQuery 中使用静态元模型的 ListAttribute 类型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com