【发布时间】:2011-10-08 13:21:28
【问题描述】:
我的查询看起来像这样:
SomeDomain.executeQuery("""
from
SomeDomain x
where
x.linkToSomeA = coalesce(:a, x.linkToSomeA) and
x.linkToSomeB = coalesce(:b, x.linkToSomeB) and
...
""",
[a: someA, b: someB, ...]
)
预期行为如下:一旦为标准参数提供null,则应忽略此标准。如果提供了 null 以外的任何内容,则使用该条件。
一切都可以正常工作,除了 Hibernate 不允许在需要域类实例的地方提供 null。所以最后这不是一个有效的查询(事实上,如果提供了任何nulls,就会抛出NullPointerException)。
如果不使用大量 if-else,我还没有找到任何方法来重写它。有谁知道如何同时同样简短和有效?
注意:真正的查询比这更复杂,所以请不要建议使用 executeQuery 以外的任何东西重写它。
【问题讨论】:
标签: java hibernate spring grails groovy