首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 原生 SQL 查詢 SQLQuery 完整用法詳解

     編輯:Java 相關知識

透過 SQLQuery 介面控制原生 SQL 查詢執行,由 Session.createSQLQuery() 取得。

基本用法

最簡單形式:

List cats = sess.createSQLQuery("select * from cats")
    .addEntity(Cat.class).list();

指定 SQL 查詢字串與回傳實體類別。結果集欄位名假設與映射檔相同。

避免欄位名稱衝突

多表聯結時可能出現同名欄位,使用別名佔位符:

List cats = sess.createSQLQuery("select {cat.*} from cats cat")
    .addEntity("cat", Cat.class).list();

addEntity() 關聯 SQL 表別名與實體類別,決定結果集結構。

載入關聯實體與集合

使用 addJoin():

List cats = sess.createSQLQuery(
    "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id")
    .addEntity("cat", Cat.class)
    .addJoin("kitten", "cat.kittens")
    .list();

純標量值或混合查詢

Double max = (Double) sess.createSQLQuery(
    "select max(cat.weight) as maxWeight from cats cat")
    .addScalar("maxWeight", Hibernate.DOUBLE)
    .uniqueResult();

使用映射檔中定義的結果集映射

List cats = sess.createSQLQuery(
    "select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id")
    .setResultSetMapping("catAndKitten")
    .list();

命名 SQL 查詢

在映射檔定義查詢名稱,像命名 HQL 一樣直接呼叫,無需 addEntity():

<sql-query name="persons">
    <return alias="person" class="eg.Person"/>
    Select person.NAME AS {person.name}, person.AGE AS {person.age}, person.SEX AS {person.sex}
    FROM PERSON person Where person.NAME LIKE :namePattern
</sql-query>

List people = sess.getNamedQuery("persons")
    .setString("namePattern", namePattern)
    .setMaxResults(50)
    .list();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved