【发布时间】:2016-08-17 05:47:35
【问题描述】:
我在我的Java Web Application 中使用postgresql 数据库和hibernate。我有一个表 contents 和 content_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