我的Hibernate版本是3.2.6.ga
谷歌搜索显示许多人遇到同样的问题 Hibernate HQL没有很好地处理别名。显然HQL只允许 您为表中存在的列添加别名。此外,HQL生成自己的 查询中所有列的别名,它们具有表单 col_x_y_ 但是我不知道这些是如何生成的。对于我的情况,我想将两个派生列添加到第三个派生列中。 原生SQL中的琐碎,在HQL中非常困难。
我设计的,简化的例子:
sqlcmd = " SELECT aa.course.code, " +
" (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END), " +
" (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END), " +
" ( col_0_1_ + col_0_2_ ) " +
" FROM Student AS aa ";
如何将第2列和第3列一起添加到HQL中形成第4列?
TIA,
仍在学习史蒂夫
答案 0 :(得分:0)
这是一个老问题,所以我希望你现在已经找到了答案,但是如果你还没有,我已经学到了一些关于nhibernate如何处理列别名的新内容。所以这是我给你的答案。
sqlcmd = " SELECT aa.course.code, " +
" (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END), " +
" (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END), " +
" ( col_0_1_ + col_0_2_ ) " +
" ( col_0_2_ + col_0_3_ ) " +
" FROM Student AS aa ";
你真的通过注意NH生成它自己的列别名来自己回答这个问题。我的研究告诉我,这只是在ORDER BY语句中,这是他们正在处理的错误。老实说,我觉得你可以在这里使用你自己的列别名
sqlcmd = " SELECT aa.course.code, " +
" (CASE WHEN aa.gender = 'M' THEN 1 ELSE 0 END) myCol1, " +
" (CASE WHEN aa.gender = 'F' THEN 1 ELSE 0 END) myCol2, " +
" ( myCol1 + myCol2 ) myCol3 " +
" ( myCol2 + myCol3 ) myCol4 " +
" FROM Student AS aa ";
但是在任何一种情况下你都可以继续使用NH抛出的别名,它将采用col_x_y _的形式_
希望这会有所帮助,祝你好运