使用hibernate Query绑定多个参数

时间:2016-03-11 07:04:14

标签: java hibernate

我想动态地将多个参数与此查询绑定,

 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 )

1 个答案:

答案 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的上下文中,这意味着在应用程序层中形成查询字符串。