『壹』 hibernate切換了不同的資料庫,那hql還需要改動嗎它會自動轉換成對應資料庫語言的sql嗎
不需要改動。hql是獨立於資料庫的,hibernate切換資料庫以後,除了jdbc的一些如地址、用戶名、密碼要換以外。
Hibernate支持不同的資料庫主要是用方言也就是dialect的,對應就是hibernate.cfg.xml配置文件里的一個設置,比如 SQL Server的就是:
<propertyname="hibernate.dialect"value="org.hibernate.dialect.SQLServerDialect"/>
這里的org.hibernate.dialect.SQLServerDialect是hibernate帶的或你自己提供的一個資料庫數據類型映射的一個Java類,由它處理不同資料庫的區別。
但是如果不同的資料庫之間差別太大的話,即直接要寫不同的SQL語句的話,Hibernate的dialect也處理不了。
『貳』 SQL語句轉換成HQL語句
你要知道hql語句是針對的對象,而sql語句是對表,hql中一般改寫的 查詢語句 。所以改起來很容易的,
以第一個為例SELECT TA001,TA002,TA006,SUM(TA015-ISNULL(TA017,0)) AS T1 INTO #MOC1
FROM MOCTA WHERE TA011 IN ('1','2','3') AND TA013='Y' AND TA010>='20130901' AND TA010<='20130930'
GROUP BY TA001,TA002,TA006
可以看出來MOCTA這個表中包含TA001,TA002,TA006等幾列,所以你先用hibernate映射成對象的各屬性,如Mocta 這個類對應這個表,其中有ta001,ta002,ta006等屬性。然後改寫成下面:
select m.ta001,m.ta002,sum(m.ta006) from Mocta as m where m.ta001 = '????' and ???
就可以了
『叄』 hql 內連接sql轉成hql
select * from Storage(類) s ,Proct(類) p where s.proctid=p.id and p.banktype='成品庫' and s.storagecount>=p.warncountup;
『肆』 如何查看hql 轉換後的sql
1、如果是Query query = session.createQuery("")的話,試一下去掉前面的「select *」即createQuery方法內的條件直接是「from ......」,有幾個是可以用的,因為支持部分SQL。
不行的話就用下面的格式(排序必用):
select OBJECT(o) from A o where o.b in(21,32)
select OBJECT(o) from A o order by o.b ASC
2、Hibernate中實現模糊查詢,可有以下三種方式:
第一種方式:QBC查詢
String name = "", info = "";
if (sub != null && sub.getSubname() != null) {
name = sub.getSubname();
}
if (sub != null && sub.getSubinfo() != null) {
info = sub.getSubinfo();
}
Criteria cr = session.createCriteria(Subject.class);
cr.add(Expression.like("subname","%"+name+"%"));
cr.add(Expression.like("subinfo","%"+info+"%"));
第二種方式:HQL查詢語句
String hql = "from Subject as s where s.subname like :name and s.subinfo like :info";
// 調用session的獲得數據列表方法,傳遞HQL查詢語句
Query query = session.createQuery(hql);
query.setString("name","%"+name+"%");
query.setString("info","%"+info+"%");
System.out.println("*********"+hql);
第三種方式:HQL查詢語句(查詢條件只能為英文或數字,漢字在傳遞到hibernate內部時出現亂碼問題)
String hql = "from Subject as s where s.subname like '%"+name+"%' and s.subinfo like '%"+info+"%'";//調用session的獲得數據列表方法,傳遞HQL查詢語句
Query query = session.createQuery(hql);
註:Subject為資料庫表subject映射的類;它有相應的屬性subname、subinfo及相應的get和set方法;sub為Subject的一個實例化對象。
『伍』 把sql轉換正HQL 資料庫:oracle
from(select * from title t order by t.createdate desc ) where rownum=1
這就是傳說中的hql語句。
『陸』 sql語句怎麼轉化為hql語句
1、如果是Query query = session.createQuery("")的話,試一下去掉前面的「select *」即createQuery方法內的條件直接是「from ......」,有幾個是可以用的,因為支持部分SQL。
不行的話就用下面的格式(排序必用):
select OBJECT(o) from A o where o.b in(21,32)
select OBJECT(o) from A o order by o.b ASC
2、Hibernate中實現模糊查詢,可有以下三種方式:
第一種方式:QBC查詢
String name = "", info = "";
if (sub != null && sub.getSubname() != null) {
name = sub.getSubname();
}
if (sub != null && sub.getSubinfo() != null) {
info = sub.getSubinfo();
}
Criteria cr = session.createCriteria(Subject.class);
cr.add(Expression.like("subname","%"+name+"%"));
cr.add(Expression.like("subinfo","%"+info+"%"));
第二種方式:HQL查詢語句
String hql = "from Subject as s where s.subname like :name and s.subinfo like :info";
// 調用session的獲得數據列表方法,傳遞HQL查詢語句
Query query = session.createQuery(hql);
query.setString("name","%"+name+"%");
query.setString("info","%"+info+"%");
System.out.println("*********"+hql);
第三種方式:HQL查詢語句(查詢條件只能為英文或數字,漢字在傳遞到hibernate內部時出現亂碼問題)
String hql = "from Subject as s where s.subname like '%"+name+"%' and s.subinfo like '%"+info+"%'";//調用session的獲得數據列表方法,傳遞HQL查詢語句
Query query = session.createQuery(hql);
註:Subject為資料庫表subject映射的類;它有相應的屬性subname、subinfo及相應的get和set方法;sub為Subject的一個實例化對象。
『柒』 SSh框架hql語句轉sql語句中文亂碼
你直接在HQL中使用中文字元?
這么做的話,你要保證代碼編輯器所用的字元集、資料庫所用字元集、數據表所用字元集均為同一種字元集才可。
在代碼中,要盡量避免顯式的使用中文。
在資料庫欄位中出現中文就更不應該了。
『捌』 如何把SQL語句轉換為HQL語句
首先你應該知道什麼是sql和hql,hql是在hibernate框架中為了那些只會java不會sql的人來操作資料庫,首先要將每個表對應建立一個類,例如表名字叫table那麼建立的類名字就是Table,hql語句和sql差的不是很多,不過hql是對這個類進行操作的,sql是對資料庫操作的。hql是一個程序員發明的,發明hibernate框架的人就把hql能轉換成sql,而你要把sql轉換成hql就很難了,起碼你應該要有他的那種水平,而且還沒什麼意義,因為資料庫最終識別的還是sql語句。
『玖』 在程序中將HQL轉換成sql(100分)
最好的方法是,去看hibernate 的源碼,然後,去修改那段 sysout...println(sql) 的sql返回到你的調用處,這樣就可以了。
你在修改後,從新編譯一下替換原有hibnate包中的類就ok了!!
祝你好運朋友!!!
『拾』 sql 轉換為hql
下面就是
sql 轉換為hql的換算方法
FROM pa_cons_mngt_cost pcmc , sa_sys_period sp , a ,SA_WORK_GRP wg ,loc
WHERE pcmc.charging_wk_grp_id = wg.wk_grp_id
AND pcmc.FROM_LOC_ID = loc.loc_id
AND pcmc.gc_cost_subtype_cd<>'-1'
AND pcmc.bu_id = wg.bu_id
AND sp.bu_id = pcmc.bu_id
AND buIdFilter
AND wg.OU_ID=a.childid
AND pcmc.gc_cost_type_cd IN ('O')
AND pcmc.txn_period_id = sp.sys_period_id
AND compose_date (sp.sys_period_year , sp.sys_period_month , 1)
BETWEEN compose_date ( :year , :fromMonth , 1)
AND compose_date ( :toYear , :toMonth , 1)
)
GROUP BY costtype , ou_id ,ou_cd
ORDER BY ou_id , costtype ]]>