我想动态地将多个参数与此查询绑定,
Query selectList = session.createSQLQuery("select * from Txn where recNo =: recNo")
.addEntity(Txn.class);
selectist.setParameter("recNo",recNo);
selectTxnList.setFirstResult(startRowNo);
selectTxnList.setMaxResults(scrollValue);
List list = selectTxnList.list();
假设我在这里检查如果我在txnNo中没有null那么我想将此参数也与此查询绑定
示例 - 从Txn中选择*,其中recNo = 123 和 txnNo = txnNo;
如果我在txnNo中为null,那么我只想将recNo与此查询绑定。
示例 - 从Txn中选择*,其中recNo = 123;
请告诉我如何在HQL的帮助下完成此操作,因为我有超过50个参数。我不想增加查询的参数(从Txn中选择*,其中recNo =:recNo )
答案 0 :(得分:1)
这是在查询本身内处理此逻辑的一个选项:
String query = "select * from Txn where recNo = :recNo and ";
query += "(case when :txnNo is not null then txnNo = :txnNo else true end)";
仅在txnNo
不是NULL
的情况下强制执行if
,否则此参数将被忽略。
但我更愿意通过在Java逻辑中使用where (col = :col or col is null)
语句而不是使用此查询来处理您的情况。
<强>更新强>
另一种选择是为50列中的每一列使用以下习语:
col
当NULL
不 col
且匹配记录时,此条件将触发,当NULL
为{{1}时,它也会触发(在这种情况下,对于大多数RDBMS,等式应该评估为NULL
。)
通常,如果您希望查询中有条件地存在WHERE
子句的整个部分,那么您需要动态SQL。在Java和Hibernate的上下文中,这意味着在应用程序层中形成查询字符串。