hibernate中使用原生sql查詢

2021-07-25 02:50:03 字數 2339 閱讀 7152

hibernate使用hql查詢有諸多不便,比如無法在from後面使用select子查詢,(貌似可以解決但是挺麻煩)

所以這裡記錄下自己找到的一些寫法

首先拿到session物件:

|-  hibernatesessionfactory.getsession();

這個類是我找的乙個工具類,下面會附上工具**,直接丟裡面用就好了

最後在執行sql的時候有些不同

要使用session.createsqlquery 而不是session.createquery

返回乙個list的集合:

|-  list list = session.createsqlquery(sql.tostring()).list();

注意: 

這裡的list集合是object型別,如果想要其返回指定的型別需要做一些變動

返回指定型別的list集合

list list = session.createsqlquery(sql.tostring())

.addscalar("name")

.addscalar("amount",hibernate.double)

.addscalar("sum",hibernate.integer)

.setresulttransformer(transformers.aliastobean(實體.class)).list();

如果你要返回的資料並不多的話,直接addscalar 新增欄位的名稱和型別進去 ,string型別的資料是不需要加入型別引數的,最後將你需要得到的實體型別加進去

(感謝貢獻者!)

package com.ap.batch.util;

import org.hibernate.hibernateexception;

import org.hibernate.session;

import org.hibernate.cfg.configuration;

/** * configures and provides access to hibernate sessions, tied to the

* current thread of execution. follows the thread local session

* pattern, see .

*/public class hibernatesessionfactory

/*** returns the threadlocal session instance. lazy initialize

* thesessionfactoryif needed.

** @return session

* @throws hibernateexception

*/public static session getanothersession() throws hibernateexception

return sessionfactory.opensession();

}public static session getsession() throws hibernateexception

session = (sessionfactory != null) ? sessionfactory.opensession()

: null;

threadlocal.set(session);

}return session;

}/**

* rebuild hibernate session factory**/

public static void rebuildsessionfactory() catch (exception e)

}/**

* close the single hibernate session instance.

** @throws hibernateexception

*/public static void closesession() throws hibernateexception

}/**

* return session factory**/

public static org.hibernate.sessionfactory getsessionfactory()

public static void setconfigfile(string configfile)

/*** return hibernate configuration**/

public static configuration getconfiguration()

}

hibernate 原生sql的使用

hql儘管容易使用,但是在一些複雜的資料操作上功能有限。特別是在實現複雜的報表統計與計算,以及多表連線查詢上往往無能為力,這時可以使用sql native sql 實現hql無法完成的任務。1 使用sql查詢 使用sql查詢可以通過兩種方式來實現 1 利用hibernate提供的sqlquery物件...

hibernate原生語句的使用,

一.查詢物件的所有字段 string sql select from jbpm processdefinition sqlquery sqlquey session.createsqlquery sql addentity processdefinition.class listprocessdef...

Django中使用原生Sql

在django中使用原生sql主要有以下幾種方式 一 extra 結果集修改器,一種提供額外查詢引數的機制 二 raw 執行原始sql並返回模型例項 三 直接執行自定義sql 這種方式完全不依賴model,前兩種還是要依賴於model 例項 使用extra 1 book.objects.filter...