一位同事最近遇到了一个问题,他将一个日期参数传递给一个命名查询。在查询中,参数被使用了两次,一次在表达式中,一次在GROUP BY子句中。令我们惊讶的是,我们发现NHibernate使用了两个变量,并将两个命名参数一起发送,如@ p1和@ p2。这种行为导致SQL无法通过查询,通常“select子句中的列不在group by子句中”(我的解释)。
这种行为是正常的吗?可以改变吗?在我看来,如果你有一个参数名称如:startDate,NHibernate只需要传入@ p1,无论你可以在查询中引用多少次:startDate。
有任何意见吗?
通过使用另一个子查询来克服SQL解析错误,解决了这个问题。
答案 0 :(得分:0)
例如,如果您使用的数据库不支持命名参数,则可能发生这种情况,在这种情况下,NHibernate使用位置参数,并复制该值。