首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Hibernate SQL 查詢別名丟失?改用 StringBuffer 拼接

     編輯:程式設計疑難解答

現象: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 分段拼接

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 拼接習慣能省去無數除錯時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved