現象:Hibernate createSQLQuery 中寫好別名 as b,執行卻報錯或別名不生效。
Integer cnt = Integer.valueOf(
session.createSQLQuery(
"select count(*) from (select t.mechno,count(*) from (select * from boc_payinfo "
+ whereStr + ") t, mp_merinfo m where t.mechno = m.mechno group by t.mechno) as b "
).list().get(0).toString());
StringBuffer sb = new StringBuffer();
sb.append("select count(*) from (select t.mechno,count(*) from (select * from boc_payinfo");
sb.append(whereStr);
sb.append(") t, mp_merinfo m where t.mechno = m.mechno group by t.mechno) as b ");
String sql = sb.toString();
Integer cnt = Integer.valueOf(
session.createSQLQuery(sql).list().get(0).toString());
System.out.println(sql) 檢查最終 SQL。whereStr 開頭是否包含 where 或 and,避免語法錯誤。@NamedNativeQuery 或 Criteria API。良好的 SQL 拼接習慣能省去無數除錯時間。