如果绝对必须避免动态查询,则可以以另外两个参数为代价:
SELECt customer FROM Customer AS customer JOIN customer.profile AS profile WHERe (profile.status IN :statusCodes OR :statusCodeCount = 0) AND (profile.orgId IN :orgIds OR :orgIdCount = 0)
然后,在Java代码中,您将执行以下操作:
session.getNamedQuery("your.query.name") .setParameterList("statusCodes", statusCodes) .setParameter("statusCodeCount", statusCodes.length) .setParameterList("orgIds", orgIds) .setParameter("orgIdCount", orgIds.length);您需要确保数组的长度为零,而不是
null检查处理
null方案时提供其他长度。
综上所述,HQL实际上更适合定义明确(例如静态)的查询。您可以解决动态参数,而不能解决动态排序。



