當前位置:首頁 » 編程語言 » hibernatesqlin佔位符
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hibernatesqlin佔位符

發布時間: 2022-11-29 19:41:11

1. hibernate sql查詢結果集怎麼轉換

在多表查詢的時候使用hibernate的sql查詢的時候,一般返回的是object[]數組,或者可以使用
session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
來轉化為map來進行處理,可以通過以下方式將查詢結果轉化為實體類:

1,sql語句 String sql="select s.id as id,s.classname as classname from grade s,student st where s.id=st.classid"

利用以下語句
session.createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(Grade.class))可以將sql中查詢出來的欄位轉化為班級這個實體類,但是必須為每個欄位指定別名,別名就是班級類裡面的對應的屬性,但必須注意,對每一個列都必須addScalar("列名"),如果不設置addScalar方法可能會報轉型錯誤的異常.如果查詢的結果裡麵包括多個表裡面的欄位,不能對應一個實體類去接受,就需要新建一個與查詢結果對應的實體類,或者直接使用map結果集

2,sql語句 String sql="select {s.*} from grade s,student st where s.id=st.classid"

針對這樣的全部欄位查詢的sql可以利用addEntity來轉化為實體類
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);

SQL查詢語句,它帶一個佔位符,可以讓Hibernate使用欄位的別名.
查詢返回的實體,和它的SQL表的別名.
addEntity()方法將SQL表的別名和實體類聯系起來,並且確定查詢結果集的形態。
這樣就可以將班級這張表裡面的所有欄位的值賦值給班級這個實體類java培訓機構排名,而且必須是所有的屬性

3,sql語句 String sql="select {s.*},{st.*} from grade s,student st where s.id=st.classid"
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);
query.addEntity("st", Student.class);
利用這樣的查詢得到的是一個object[]數組,object[0]就是班級實體類,object[1]就是學生實體類
可以用addScalar(String arg,Type type)方法定義要返回的欄位類型,如
s.createSQLQuery(shuiQingHQL).addScalar("STCD",Hibernate.STRING).addScalar("STNM")

2. hibernate,sql生成問題,謝謝幫忙

怎麼可能是後面多了.dbo呢,這是系統生成的,沒有錯吧

咋一看,就知道是 could not execute query 不能執行查詢語句
String queryString = "from SysUser as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, 「admin」);
admin的雙引號是在中文轉入法下輸入的吧。

3. hibernate的三種查詢方式

1.1、SQL概述

HQL是Hibernate Query Language的縮寫,提供更加豐富靈活、更為強大的查詢能力;HQL接近SQL`語句查詢語法。

完整的HQL語句形式如下:

select | update | delete … from … where … group by … having … order by … asc|desc

其中的update、delete為Hibernate3中所新添加的功能,可見HQL查詢非常類似於標准SQL查詢。HQL查詢在整個Hibernate實體操作體系中占核心地位。

String hql = "HQL語句";

Query query = session.createQuery(hql);

List list = query.list(); //查詢得到多個實體對象集合

Object result = query.uniqueResult(); //查詢得到一個實體對象

int x = query.executeUpdate(); //執行update或delete語句,返回數據表受影響行數

1.2、實體查詢

查詢過程中表名使用類名,列名使用屬性名,類名和屬性名稱區分大小寫

String hql="from Users";//from 實體類類型名稱

Query query = session.createQuery(hql);

List<Users> list = query.list();

for (Users user : list) {

    System.out.println(user);

}

1.3、帶where的查詢

Query query = session.createQuery("from Users where uid=3");

Users user = (Users) query.uniqueResult();//uniqueResult 單一對象

System.out.println(user);

Query query = session.createQuery("from Users where uid>5");

List<Users> list = query.list();

for (Users user : list) {

    System.out.println(user);

}

1.3、屬性查詢

查詢部分屬性

String hql="select u.uid,u.uname,u.upwd from Users u where u.uname='張三'";

Query query = session.createQuery(hql);

List<Object[]> list = query.list();

for (Object[] objects : list) {

    System.out.println(Arrays.toString(objects));

}

String hql="select new Users(u.uname,u.upwd) from Users u where u.uname='張三'";

Query query = session.createQuery(hql);

List<Users> list = query.list();

for (Users user : list) {

    System.out.println(user);

}

1.4、實體的更新和刪除

從hibernate 3版本開始才支持

//更新

String hql="update Users set uname='王五',upwd='321' where uid=3";

int res = session.createQuery(hql).executeUpdate();

//刪除

String hql="delete from Users where uid=3";

int res = session.createQuery(hql).executeUpdate();

/*

返回值結果:

正整數:表受影響的行數據

0: 語句正常執行,但沒有行受影響

負整數:通常是-1,執行HQL語句是一條查詢語句

*/

HQL語句不能做添加

1.5、分組與排序

排序

處理方式和SQL語句中的排序是一樣的

String hql="from Users order by uid";

Query query = session.createQuery(hql);

List<Users> list = query.list();

for (Users user : list) {

    System.out.println(user);

}

order by語句只能出現在語句的最後位置

分組

處理方式和SQL語句中分組查詢相同

分組語句需要處理篩選,只能使用having語句,而不能使用where語句。

String hql = "select e.dept.deptno, count(e) from Emp e group by dept.deptno";

String hql = "select e.dept.deptno, count(e) from Emp e group by dept.deptno having count(e)>=5";

1.6、參數綁定

使用佔位參數

String hql="from Users where uid=? or uname=?";

Query query = session.createQuery(hql);

//索引從0開始

query.setInteger(0, 3);//query.setParameter(0, 3);

query.setString(1, "張三");//query.setParameter(1, "張三");

List<Users> list = query.list();

for (Users user : list) {

    System.out.println(user);

}

使用參數名稱

String hql = "from Users where uid=:no1 or uid=:no2";

Query query = session.createQuery(hql);

query.setInteger("no1", 1);

query.setInteger("no2", 3);

//....

可以使用點位參數和名稱參數混合使用

String hql = "from User where uid=? or uid=:no2";

Query query = session.createQuery(hql);

query.setInteger(0, 7788);

query.setInteger("no2", 7566);

//....

//使用點位參數和名稱參數混合使用,所有點位參數必須放在前面,一旦有名稱參數出現,其後將不能再出現佔位參數

1.7、連接查詢

--SQL語句:查詢員工姓名、薪資、部門名稱

SELECT ENAME,SAL,DNAME

FROM EMP e JOIN DEPT d ON e.DEPTNO=d.DEPTNO

SELECT ENAME,SAL,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO

沒有on語句

能被連接到查詢中的必須是主查詢對象的子屬性

String hql="SELECT e.ename, e.sal, e.dept.dname FROM Emp e";

//HQL連接查詢

String hql="SELECT e.ename, e.sal, d.dname FROM Emp e JOIN e.dept d";

String hql = "SELECT e FROM Emp e JOIN e.dept"; //JOIN將沒有意義

String hql = "FROM Emp e JOIN e.dept";

Query query = session.createQuery(hql);

List<Object[]> list = query.list();

//List集合中的數組中會保存兩個元素:

//0:主數據(Emp)

//1:從數據(Dept)

//查詢編號為7788的員工信息,同時將對應的dept信息和manager信息查詢並保存在對應的子屬性中

String hql = "FROM Emp e JOIN FETCH e.dept d JOIN FETCH e.manager m WHERE e.empno=7788";

Query query = session.createQuery(hql);

Emp emp = (Emp) query.uniqueResult();

System.out.println(emp);

System.out.println(emp.getManager());

System.out.println(emp.getDept());

1.8、分頁

String hql = "from Users";

Query query = session.createQuery(hql);

query.setFirstResult(0);

query.setMaxResults(2);

2、QBC查詢

QBC(Query By Criteria)查詢就是通過使用Hibernate提供的Query By Criteria API來查詢對象,這種API封裝了SQL語句的動態拼裝,對查詢提供了更加面向對象的功能介面。

QBC查詢最重要的三個類:

Restrictions 條件限制

Projections 列設射

Order 排序

2.1、查詢實現

Criteria criteria = session.createCriteria(Users.class);

//session.createCriteria("entity.Users");

//session.createCriteria(Users.class, "別名");

List<Dept> list = criteria.list();

//查詢單行結果(如果結果有兩行或更多,會報錯)

Object uniqueResult = criteria.uniqueResult();

2.2、Projections 列投射

語法:

//查詢uname屬性

Criteria criteria = session.createCriteria(Users.class);

PropertyProjection property = Projections.property("name");

criteria.setProjection(property);

List<Object> result = criteria.list();

//查詢uname, upwd屬性

Criteria criteria = session.createCriteria(Users.class);

//1.創建投射列表

ProjectionList projectionList = Projections.projectionList();

//2.向投射列表中添加列投射

PropertyProjection property1 = Projections.property("uname");

PropertyProjection property2 = Projections.property("upwd");

projectionList.add(property1).add(property2);

//3.將投射列表設置到准則中

criteria.setProjection(projectionList);

List<Object> result = criteria.list();

返回值類型 方法名稱 描述

PropertyProjection Projections.property 指定某屬性

AggregateProjection Projections.avg 求平均值

CountProjection Projections.count 統計某屬性的數量

CountProjection Projections.countDistinct 統計某屬性不同值的數量

PropertyProjection Projections.groupProperty 指定某個屬性為分組屬性

AggregateProjection Projections.max 求最大值

AggregateProjection Projections.min 求最小值

ProjectionList Projections.projectionList 創建一個ProjectionList對象

Projection Projections.rowCount 查詢結果集中的記錄條數

AggregateProjection Projections.sum 求某屬性的合計

2.3、Restrictions 條件限制

語法:

Criteria criteria = session.createCriteria(Users.class);

Criterion notNull = Restrictions.isNotNull("comm");

criteria.add(notNull); //添加一個條件(如果添加了多個條件,默認條件之間使用and連接)

List<Users> list = criteria.list();

返回值類型 方法名稱 描述

SimpleExpression Restrictions.eq 等於(equal)

Criterion Restrictions.allEq 使用Map,Key/Valu進行多個等於的比對

SimpleExpression Restrictions.gt 大於(great than)

SimpleExpression Restrictions.ge 大於等於(great than or equal)

SimpleExpression Restrictions.lt 小於(less than)

SimpleExpression Restrictions.le 小於等於(less than or equal)

Criterion Restrictions.between 對應SQL的between

SimpleExpression Restrictions.like 對應SQL的like

Criterion Restrictions.in 對應SQL的in

LogicalExpression Restrictions.and and關系

LogicalExpression Restrictions.or or關系

Criterion Restrictions.isNull 為空

Criterion Restrictions.sqlRestriction SQL限定查詢

Criterion Restrictions.not 取反

2.3、Order排序

語法:

Criteria criteria = session.createCriteria(Dept.class);

criteria.addOrder(Order.asc("name"))

.addOrder(Order.desc("loc"));

//SELECT * FROM DEPT ORDER BY name ASC, loc DESC

返回值類型 方法名稱 描述

Order Order.asc(String propertyName) 升序

Order Order.desc(String propertyName) 降序

2.4、分頁查詢

Criteria criteria = session.createCriteria(Dept.class);

int pageNum = 2, pageSize = 5;

criteria.setFirstResult((pageNum-1)*pageSize); //查詢起始行下標

criteria.setMaxResults(pageSize); //查詢的最大行數

List list = criteria.list();

//setFirstResult方法和setMaxResults方法同樣可以在SQLQuery及Query類型上使用

3、原生SQL查詢

1、查詢

String sql = "select uid,uname,upwd from _users";

List list = session.createSQLQuery(sql).list();

for(Object obj : list){

    System.out.println(obj);

}

2、 addEntity()

String sql = "select uid,uname,upwd from _users";

// addEntity()可以告訴Hibernate你想要封裝成對象的類型,然後自動為你封裝

SQLQuery query = session.createSQLQuery(sql).addEntity(Users.class);

List<User> list = query.list();

for(Users user : list){

System.out.println(user.getUname());

}

3、 uniqueResult

String sql = "select uid,uname,upwd from _users where uid = 2";

SQLQuery query = session.createSQLQuery(sql).addEntity(Users.class);

Users user = (Users) query.uniqueResult();//返回單一對象

System.out.println(user.getUname());

USB Microphone https://www.soft-voice.com/

Wooden Speakers  https://www.zeshuiplatform.com/

亞馬遜測評 www.yisuping.cn

深圳網站建設www.sz886.com

4. 淺談hql和sql的區別,描述特別需要注意的地方

1.hql與sql的區別
sql 面向資料庫表查詢
hql 面向對象查詢
hql : from 後面跟的 類名+類對象 where 後 用 對象的屬性做條件
sql: from 後面跟的是表名 where 後 用表中欄位做條件
查詢
在Hibernate中使用查詢時,一般使用Hql查詢語句。
HQL(Hibernate Query Language),即Hibernate的查詢語言跟SQL非常相像。不過HQL與SQL的最根本的區別,就是它是面向對象的。
使用HQL時需要注意以下幾點:
l 大小寫敏感
因為HQL是面向對象的,而對象類的名稱和屬性都是大小寫敏感的,所以HQL是大小寫敏感的。
Eg.
HQL語句:from Cat as cat where cat.id > 1;與from Cat as cat where cat.ID > 1;是不一樣的,這點與SQL不同。
l from子句
Eg. from Cat,該句返回Cat對象實例,開發人員也可以給其加上別名,eg. from Cat as cat,對於多表查詢的情況,可參考如下:
from Cat as cat, Dog as dog
其它方面都與SQL類似,在此不再贅述。
接下來講一個在Hibernate中查詢的例子。
1.1簡單查詢
List list = session.createQuery("from User as user order by user.loginName").list();
1.2帶單個參數的查詢
List list = session.find("from User as user where user.loginName=?",
loginName,
Hibernate.STRING);
1.3多個參數的查詢
Eg1. 此例採用「?」佔位符的方式
String hql = "from User as user where user.loginName=? and user.orgId=? ";
Query query = session.createQuery(hql);
query.setParameter(1, 'amigo');
query.setParameter(2, new Long(1)) ;
List list = query .list();
Eg2. 此例採用「:paramName」的方式
String hql = "from User as user where user.loginName=:loginName and user.orgId=:orgId ";
Query query = session.createQuery(hql);
query.setParameter('loginName', 'amigo');
query.setParameter('orgId', new Long(1)) ;
List list = query .list();
1.4查詢數量
int count = (Integer) session.createQuery("select count(*) from User").uniqueResult().intValue();
1.5限制查詢起始值和數量的查詢
這種一般是在記錄需要分頁的時候需要用到,例如,在如下的代碼中,限制查詢的開始記錄的位置為50,最大查詢條數為50。
String hql = "from User as user order by user.loginName";
int firstResult= 50;
int maxResults = 50;
Query query = session.createQuery(hql);
query = query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
1.6子查詢
在某些情況下,也需要用到子查詢,例如在下面的例子中,User為用戶對象,UserRole為用戶與角色關聯對象。如下HQL語句將沒有分配角色的用戶對象查找出來。
String hql = "from User user where user.loginName"
+ " not in(select ur.user.loginName from UserRole ur) ";
List list = (session.createQuery(hql)).list();
1.7原生SQL查詢
對於某些復雜的查詢語句,需要調用某種特定的資料庫的特定函數才能解決,Hibernate雖然不推薦使用原生SQL語句來查詢,因為這將破壞資料庫的易移植性,但是Hibernate中也提供了使用原生SQL進行查詢的方法,只需要獲得連接即可。
Eg. 在下面的例子中,用到了Sql Server資料庫中的原生sql語句,如下所示:
String timeUnit = "13";
String sql = "select count(*) count, CONVERT(VARCHAR(" + timeUnit +"), log.gen_datetime,121) timeUnit " + "from Log log";
SQLQuery query = session.createSQLQuery(sql)
.addScalar("count", Hibernate.INTEGER)
.addScalar("timeUnit", Hibernate.STRING);
List list = query.list();
2 新增
在資料庫中新增記錄在Hibernate中不需要使用insert命令,只需要構造新增的對象後,調用Session對象的save(…)方法即可。
2.1新增單個對象
新增單個對象的實例如下,該實例將在用戶表中新增一條記錄。
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
User user = new User();
user.setLoginName("amigo");
user.setFullName("阿蜜果");
……
session.save(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
2.2批量新增對象
對於批量新增對象的情況,需要在新增一部分對象後flush和clear一次,例如,沒批量新增20個對象時手動的flush一次,假設在list為一個用戶列表,裡麵包含很多User對象,那麼要將實現這些對象的批量新增,可採用如下方法:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
session.save(user) ;
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
3 更新
在hibernate中,更新對象前不需要使用查詢語句:update…,一般需要在取得需要更新的持久化對象後,執行Session對象的update(…)方法。例如:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//取得持久化對象
User user = session.get(User.class, "amigo");
//對需要修改的屬性進行修改
user.setFullName("阿蜜果");
……
session.update(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
4 刪除
4.1刪除單個對象
一般在取得某對象後,開發人員可以調用Session對象的delete(…)方法刪除該對象。
Eg. 下面的實例中取得loginName(主鍵)為「amigo」的User對象後,將它刪除。
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//取得持久化對象
User user = session.get(User.class, "amigo");
session.delete(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
4.2批量刪除對象
對於批量刪除對象的情況,開發人員可以在取得待刪除的對象列表後,一個一個的將對象刪除,對於每個對象的刪除方法,見3.4.1小節。開發人員還可以hql語句來做批量刪除。
Eg. 該實例通過delete語句來刪除記錄,除了loginName為「amigo」的對象為,其餘都刪除,代碼如下所示:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
String hql = "delete User as user where user.loginName != 'amigo'";
Query query = session.createQuery(hql);
int count = query.executeUpdate();
ts.commit();
System.out.println("delete count : " + count); //刪除條數
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}

5. 如何得到hibernate顯示在控制台的hql或sql語句

不知道樓主的意思是不是把那些佔位符換成具體的值,這樣就可以直接復制SQL語句在資料庫控制台粘貼直行了。

如果是這樣的話。樓主有沒有注意過直行hibernate時總是報的警告:
log4j:WARN Please initialize the log4j system properly.
使用這個log4j就可以顯示相信信息。

我給你一個屬性文件:log4j.properties把他放到和hibernate.cfg.xml相同目錄下。修改屬性文件中屬性log4j.logger.org.hibernate.type=debug
這樣,就可以顯示詳細數據了。

把以下內容保存命名log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'error' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=error

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=error

### log just the SQL
#log4j.logger.org.hibernate.SQL=error

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=debug
#log4j.logger.org.hibernate.type=error

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=error

### log HQL parse trees
#log4j.logger.org.hibernate.hql=error

### log cache activity ###
#log4j.logger.org.hibernate.cache=error

### log transaction activity
#log4j.logger.org.hibernate.transaction=error

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=error

### enable the following line if you want to track down connection ###
### leakages when using ###
#log4j.logger.org.hibernate.connection.=trace

6. Hibernate4 HQL查詢佔位符的問題

0.0 h4換寫法了嗎..看你的代碼感覺和h3變化好大....

h3的寫法 給你參考一下吧.
public List<Department> FindById(Serializable id) {//按ID 查詢
return getHibernateTemplate().find("from Department where deptid = ?",id);
}

7. hibernate中sql不等於的使用

1、sql中有兩種方式表示不等於,一種是"<>"(不含引號),另一種是"!="(不含引號),用法是一樣的。 2、那就是where a <> 100; 或者where a != 100; 結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。 結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能

8. 關於hibernate中佔位符和mysql中:=的問題

我也遇到同樣的情況,hiberate是支持這種寫法的,你仔細看看你的sql語句是否寫對了

9. Hibernate中的SQL寫法。

我比較喜歡hibernate本身自帶的HQL語言,增刪改查語句基本不用自己寫。

添加:
Admin admin=new Admin();
admin.set...();
session.save(admin);
刪除:
session.delete(admin);
修改:
Admin admin=session.load(Admin.class,new Integer(i));
session.saveOrUpdate(admin);
查詢:
Query query = session.createQuery("select OBJECT(o) from Admin o order by o.adminid");
亦可寫成:
Query query = session.createQuery("from Admin");
注意:hibernate的業務邏輯操作必須放在事務中,代碼如下:
Transaction tr = session.beginTransaction();
try {
****增刪改查語句***
// 提交事務
tr.commit();
} catch (Exception e) {
// 回滾事務
tr.rollback();
} finally {

}
還有,hibernate內的語句不是SQL,而是HQL,但它支持SQL,又它特定的寫法;表名不是資料庫的名字,而是映射後的實體類(表)的名字;而且,是直接對資料庫進行操作,也就hibernate的事務一提交,資料庫內的信息就做了相應的修改;最後,hibernate不是個軟體,而是一個插件,通俗的說法是別人寫好的「包」,導入項目後,根據「包」的規范去做快速開發。

10. Hibernate4 升級到Hibernate5 中 sql查詢注意事項

Hibernate4 中,利用原生SQL語句查詢時,
1、可使用Session.createSQLQuery(sql)建立Qurey(org.hibernate.Query),
2、可使用Query.setParameter(int index, Object obj),對sql語句中的參數根據位置進行參數值動態綁定;

升級到 Hibernate5
1、org.hibernate.Query被標記為@Deprecated
2、Session().createSQLQuery(sql)返回類型為org.hibernate.query.Query;
3、並且Session().createSQLQuery也已經被標記為@Deprecated;
4、可使用Session().createNativeQuery(sql)代替createSQLQuery。
5、createNativeQuery返回的Query, 不可 通過setParameter(int index, Object obj) 根據位置 進行參數值動態綁定; 只可以 通過setParameter(String paramname, Object obj) 按參數名稱綁定
6、createNativeQuery(sql)中的sql語句中的 查詢佔位符
只可使用 命名參數 方式進行編寫。

上問錯誤例子中,將導致如下錯誤: