【问题标题】:How to use List<String> params in Restrictions.like如何在 Restrictions.like 中使用 List<String> 参数
【发布时间】:2020-06-06 01:55:36
【问题描述】:

我在Restrictions.in 方法中使用List 对象,现在我必须在Restrictions.like 使用这个案例 但是Restrictions.like 没有收到List 参数。我怎么解决这个问题? 我的代码在底部:

public void setPhones(Set<String> phones) {
    this.phones.addAll(phones);
    if (!this.phones.isEmpty()) {
        aliases.add(new QueryAlias("profile", "profile"));
        criterions.add(Restrictions.like("profile.phone", this.phones));
    }
}

【问题讨论】:

    标签: java spring hibernate criteria dropwizard


    【解决方案1】:

    更正我之前(现在已编辑)的答案

    根据文档 (https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/criterion/Restrictions.html),您似乎没有直接的方法来做到这一点。

    您可以尝试迭代您的列表,然后为您的每部手机创建一个Restriction.like 列表,然后将此列表转换为一个数组以用于Restrictions.or:

    public void setPhones(Set<String> phones) {
    
        this.phones.addAll(phones);
    
        if (!this.phones.isEmpty()) {
            // Creates a list to store criterions
            List<Criterion> criterionsPhoneNumbers = new ArrayList<>();
    
            // For each number searched, it creates a criterion with a "Like Restriction" adding to criterionsPhoneNumbers List. 
            // Pay attention to match mode (in raw sql it'll be a "like" using %phoneNumber% - check the generated SQL by hibernate).
            // You can change this to suit your needs.
            for (String number : numbers) {
                aliases.add(new QueryAlias("profile", "profile"));
                criterionsPhoneNumbers.add( Restrictions.like("number", number, MatchMode.ANYWHERE)  ) ;
            }
    
            // Here criterionsPhoneNumbers is being converted to array then added to the criteria with "Or Restriction" 
            criteria.add(Restrictions.or( criterionsPhoneNumbers.toArray(new Criterion[restrictionsPhoneNumbers.size()]) ));
        }
    
    
    }
    

    我之前的回答是错误的,因为将每个电话号码添加为 Restriction.like(仅)是不够的,并且在 'where' 子句中被转换为带有逻辑 'and' 的 sql。由于我没有测试,所以我看不到错误。 我已经实现了,然后我看到了错误。
    我很抱歉。

    【讨论】:

    • 你能发布已经抛出的错误/异常吗?
    • 豪尔赫杜阿尔特,没有任何错误,但也不是预期的结果
    • 我已经实现了,现在它可以工作了。我的示例实现可在 github 获得
    • 嗨,@ShavkatTurakulov。由于答案对您有所帮助和工作,您能接受吗?
    • @JorgeDuarteI。还没有测试它,但我相信它应该可以工作。当我测试时,没有这一行:criteria.add(Restrictions.or( criterionsPhoneNumbers.toArray(new Criterion[restrictionsPhoneNumbers.size()]) ));
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2020-10-20
    • 2014-03-29
    相关资源
    最近更新 更多