【问题标题】:How to construct criteriaQuery to match a specified String with List<String>如何构造条件查询以将指定的字符串与 List<String> 匹配
【发布时间】:2021-09-07 02:57:46
【问题描述】:
 public class MyEntity{
     private Long id;

     @Convert(converter = MyEntity.StringListConverter.class)
     private List<String> names= new ArrayList<>();          
 }

 

数据库中names字段为jsonArray格式的字符串,如["Washington","Mosco","London"]。 我想检查一个名为“alex”的名字是否在 names 字段中。如何构建条件查询?

     CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
       CriteriaQuery<MyEntity> criteriaQuery = 
       criteriaBuilder.createQuery(MyEntity.class);
       Root<MyEntity> root = criteriaQuery.from(MyEntity.class);
       criteriaQuery.select(root);
       Predicate restrictions = criteriaBuilder.conjunction();

       if(null != inName){/*inName is such as "alex" */
        restrictions = criteriaBuilder.and(restrictions ,...);

       }

如何构造“criteriaBuilder.and”的第二个参数?

【问题讨论】:

  • 你的意思是要检查MyEntity的某列的值是否包含在names列表中?
  • 我想检查一个值作为查询条件是否包含在名称列表中。例如,名称为 ["abc","def"] 的 MyEntity 记录将满足查询以查找名称字段中包含 "abc" 的记录。

标签: hibernate criteriaquery


【解决方案1】:

为此,您需要一个自定义函数。请参阅HQL - Check if an Array contains a value 的此答案,这对您来说应该是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多