【问题标题】:How to use where condition for a column which contains comma delimited values using Hibernate and mysql如何使用 Hibernate 和 mysql 对包含逗号分隔值的列使用 where 条件
【发布时间】:2017-04-21 10:12:24
【问题描述】:

在 where 子句中使用数组列表,如下所示,带有 HibernateMYSQL

List<String> list=new ArrayList<String>();
list.add("name1");
list.add("name2");
list.add("name3");

String query= "from TEST where name in (:names)";
Query q = s.createQuery(hql);
q.setParameterList("names", list);

但需要为逗号分隔值的列实现相同的 where 条件。 如果此列中的任何值出现在 arraylist 中,则必须显示所有记录

表结构

ID   NAME
----------
1   name1,name2,name3
2   name1
3   name2,name3
4   name5,name8
5   name3,name6

预期结果:

ID 为 1,2,3,5 的记录必须显示。

问题陈述: 我想使用有限制的 Hibernate 标准,我有 arraylist 可以在 where 子句中使用,我们不能使用 Restrictions.in("name",list); 因为这个名称列包含逗号分隔的值,我们需要检查 arraylist 中的任何元素是否是该列中数据的一部分。

【问题讨论】:

    标签: java mysql hibernate hibernate-criteria


    【解决方案1】:

    修复该数据库结构是我的建议。

    但是,如果您现在需要解决方案,我建议您使用like SQL 语句。它将检查给定的字符串是否包含在结果中。

    这里有一个关于此事的链接,以便您了解它是如何工作的:http://www.w3schools.com/sql/sql_like.asp

    你的 SQL 会变成这样:

    from TEST where name like (:names)
    

    【讨论】:

    • 我们可以使用以下标准吗Restrictions.like("NAME",list);
    • 我不明白你的评论。它应该是一个问题吗?
    • 我想使用带有限制的 Hibernate 标准,并且我在 where 子句中使用了 arraylist,我们不能使用 Restrictions.in("name",list); 因为此 name 列包含逗号分隔的值,我们需要检查 arraylist 中的任何元素是否是该列中数据的一部分。希望很清楚,如果您需要更多信息,请告诉我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2021-07-23
    • 2016-02-03
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多