【发布时间】:2011-06-02 11:50:00
【问题描述】:
我正在编写一个用于搜索文档的 JPA QL 命名查询。这应该只在一个查询中完成,我无法切换到本机 SQL(这是非功能性要求)。 我写的查询如下:
query = "select doc from Doc doc " +
" join doc.Csts cst " +
" where cst.cstFrstNm like :FrstNm " +
" and cst.cstLastNm like :LastNm " +
" and doc.resId = :id ";
使用以下说明对该查询进行参数化:
query.setParameter("FrstNm ", firstName + '%');
query.setParameter("LastNm ", lastName + '%');
query.setParameter("id", resId);
以上代码中的firstName, lastName, resId 是我的搜索条件,它们都是字符串,可以为空。当其中之一为空时,调用查询时不应考虑它。
例如:
假设:firstName = "John", lastName = "Doe" 并且 resId 为空,那么查询应该返回 Doc 表中所有用于用户 John Doe 的条目,无论他们的 resId 是什么。
我试图将额外的 OR 和 AND 条件放入查询中,以检查 resId 是否为空,但它不起作用。我正在 HSQLDB 上测试它。
有没有办法修改这个 JPA 查询来处理空值?
【问题讨论】: