【问题标题】:HQL query to search for mutiple strings in a postgresql database table field用于在 postgresql 数据库表字段中搜索多个字符串的 HQL 查询
【发布时间】:2016-08-17 05:47:35
【问题描述】:

我在我的Java Web Application 中使用postgresql 数据库和hibernate。我有一个表 contentscontent_data 作为文本字段。其对应的POJO 被命名为ContentTO,并且对于数据库字段content_data 具有以下字段contentData: 公共类 ContentTO

{
    private int contentId;
    private String contentData;
    private int applicationId;
    private int siteId;
    private int userCreated;
    private int userModified;
    private Date createdTime;
    private Date updatedTime;
}

我有以下方法:

public List<ContentTO> listContentsBySearchStrings(String searchData, int applicationId, int siteId) throws HibernateException 
    {
        Query query = getCurrentSession().createQuery("ContentTO where siteId = :siteId and lower(contentData) LIKE :searchString ");
        query.setParameter("siteId", siteId);
        query.setParameter("applicationId", applicationId);
        query.setParameter("searchString", "%"+searchData+"%");
        List<ContentTO> resultsList = query.list();
        if(resultsList != null && ! resultsList.isEmpty())
        {
            return resultsList;
        }
        return new ArrayList<ContentTO>();
    }

如果在字段中仅搜索单个字符串,则此方法将起作用。我正在尝试搜索可以在传递的参数中以逗号分隔的多个字符串。

我还尝试了以下 SQL 来测试查询:

SELECT * FROM contents
WHERE content_data LIKE '%mydata'
  AND content_data LIKE '%testdata'
  AND content_data LIKE '%totest';

当参数是逗号分隔的字符串时,有什么方法可以使用 hql 来做到这一点。

【问题讨论】:

  • “但是即使 content_data 包含 mydata1234,此查询也会返回该行。有没有办法使用 hql 来做到这一点。” 当然它会返回该数据,因为您的 @ 987654333@ 条件匹配 mysql 的 1234。
  • @sumitbadaya,谢谢,我已经更新了问题
  • 仍不清楚。展示一个包含两行或三行的具体示例,以及变量包含的内容以及查询应该返回的内容。但一般来说,如果您将逗号分隔的字符串存储在一列中,请不要这样做,并使用带有 OneToMany 或 ElementCollection 的单独表。如果你的变量中有一个逗号分隔的字符串,那么也不要这样做,而是传递一个 List 或 Set
  • 也许你想使用OR而不是AND
  • @JBNizet,它在列中不是逗号分隔的字符串,它是一个文本字段,它可以包含任何内容,我想在该文本字段中搜索一个字符串,所以如果搜索字符串包含多个值,它将作为逗号分隔的字符串传递

标签: java postgresql hibernate hql


【解决方案1】:

您可以在参数是字符串列表的情况下使用“IN”:

...where content_data in (:listOfYourStrings)

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多