xskow's road.
做好自己,做好一切。
BlogJava
首頁
新隨筆
聯系
聚合
管理
數據加載中……
關于Hibernate Native sql query的詭異問題
當要做連表查詢時,比如a和b,如果a1和b1都有一個name字段,使用下面的sql語句:
select a.name, b.name from a1 a, b1 b
假設不作任何處理,毫無疑問返回的是object[]的List,object[0]是a.name, object[1]是b.name。但是,咋們想錯了。。。object[0]和object[1]一樣是a.name,開始認為是hibernate調用jdbc的resultset時使用了如getString("name")這樣的東東,所以得到的都是第0個值。好吧,加個別名試試:
select a.name as name1, b.name as name2 from a1 a, b1 b
這好像可以呀。。。但是卻報錯,找不到name列。。。
好吧,來個ResultTransformer吧!假設轉換目標類為TestDTO.class:
public
class
TestDTO
{
private
String name1;
private
String name2;
//
getters and setters
}
這回應該好了吧?還是一樣的錯誤。。。
注意:使用ResultTransformer的時候,別名注射不能用{name1}這種形式的,這種形式只適用于addEntity的情況!
為什么我要用sql查詢?由于特殊情況,我使用一些和數據庫有依賴的函數,以后轉數據庫要是知道不兼容也肯定是sql那塊的,而不是hql,解決問題就方便多了。(注:hql一樣可以用特定數據庫的函數)而且我連的是多個表,每個表字段十來個,如果用實體查詢的話,每一行就是三個對象,而我需要的只是5個字段而已。而且如果可以用ResultTransformer的話,操作起來也十分方便。
不知道有誰也遇到過同樣問題?還是說大家都不用hibernate進行sql查詢,不管是什么情況?
得再次研究hibernate官方文檔了。。。從文檔的那一章中,完全沒有找到有同名字段然后又使用ResultTransformer的情況。。。
posted on 2009-06-11 09:57
xskow!
閱讀(973)
評論(4)
編輯
收藏
所屬分類:
SSH探索
評論
#
re: 關于Hibernate Native sql query的詭異問題 2009-12-17 21:54
動動
碰到了同樣的問題 沒解決 ,你的解決了嗎?如果解決了 可以告知嗎?
先謝過。
我的郵箱:xiangdong.liu@kvect.com
回復
更多評論
#
re: 關于Hibernate Native sql query的詭異問題 2009-12-19 12:19
Mickey.Shao
@動動
我估計要是你連表的時候有字段名字相同就不行了,最后我還是用了hql解決的。如果連表時候要查的字段名字不一樣就不會有問題。哎。。。
回復
更多評論
#
re: 關于Hibernate Native sql query的詭異問題 2012-09-04 22:59
雙方
哎,我來回答下。這個需要增加別名來回避。為了后人
String sql1 = "select l.pos_id,l.id as add2 from launch l where l.id=2734837";
Object list1 = baseDao.createSQLQuery(sql1).addScalar("add2").uniqueResult(); // 失敗
System.out.println(list1);
注意一點是別名不能是mysql 關鍵字,否則會報錯
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'add from launch l where l.id=2734837' at line 1
回復
更多評論
#
re: 關于Hibernate Native sql query的詭異問題
2012-09-04 23:01
雙方
@雙方
注意要增加這個 addScalar("add2")
http://blog.csdn.net/wfm0105/article/details/6567476
1.1標量查詢
最基本的SQL查詢就是獲得一個標量(數值)的列表。
1sess.createSQLQuery("SELECT * FROM CATS").list();
2sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();
將返回一個Object數組(Object[])組成的List,數組每個元素都是CATS表的一個字段值。Hibernate會使用ResultSetMetadata來判定返回的標量值的實際順序和類型。
如果要避免過多的使用ResultSetMetadata,或者只是為了更加明確的指名返回值,可以使用addScalar()。
1sess.createSQLQuery("SELECT * FROM CATS")
2 .addScalar("ID", Hibernate.LONG)
3 .addScalar("NAME", Hibernate.STRING)
4 .addScalar("BIRTHDATE", Hibernate.DATE)
這個查詢指定了:SQL查詢字符串,要返回的字段和類型.它仍然會返回Object數組,但是此時不再使用ResultSetMetdata,而是明確的將ID,NAME和BIRTHDATE按照Long, String和Short類型從resultset中取出。同時,也指明了就算query是使用*來查詢的,可能獲得超過列出的這三個字段,也僅僅會返回這三個字段。
對全部或者部分的標量值不設置類型信息也是可以的。
1sess.createSQLQuery("SELECT * FROM CATS")
2 .addScalar("ID", Hibernate.LONG)
3 .addScalar("NAME")
4 .addScalar("BIRTHDATE")
基本上這和前面一個查詢相同,只是此時使用ResultSetMetaData來決定NAME和BIRTHDATE的類型,而ID的類型是明確指出的。
關于從ResultSetMetaData返回的java.sql.Types是如何映射到Hibernate類型,是由方言(Dialect)控制的。假若某個指定的類型沒有被映射,或者不是你所預期的類型,你可以通過Dialet的registerHibernateType調用自行定義.
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
【轉】ClassNotFoundException:org.hibernate.hql.ast.HqlToken-weblogic使用hibernate hql問題解決
關于Hibernate Native sql query的詭異問題
華南理工大學校運會計分系統項目總結(一)
Powered by:
BlogJava
Copyright © xskow!
<
2012年9月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
統計
隨筆 - 8
文章 - 17
評論 - 13
引用 - 0
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
成長道路(5)
(rss)
隨筆檔案
2010年9月 (1)
2009年6月 (1)
2009年5月 (2)
2008年11月 (1)
文章分類
Java(3)
(rss)
Maven2(2)
(rss)
php(1)
(rss)
SSH探索(4)
(rss)
web2.0(1)
(rss)
Web安全(3)
(rss)
前臺Html and JS腳本(3)
(rss)
開發環境(1)
(rss)
測試(1)
(rss)
文章檔案
2010年11月 (1)
2010年9月 (1)
2009年7月 (2)
2009年6月 (7)
2009年5月 (5)
2009年4月 (1)
2008年11月 (1)
搜索
最新評論
1.?re: 解決ubuntu下安裝apache2+php5+mysql時從瀏覽器測試php文件變成提示下載的問題[未登錄]
真的非常感謝你!
--knight
2.?re: 關于Hibernate Native sql query的詭異問題
評論內容較長,點擊標題查看
--雙方
3.?re: 關于Hibernate Native sql query的詭異問題
評論內容較長,點擊標題查看
--雙方
4.?re: 解決ubuntu下安裝apache2+php5+mysql時從瀏覽器測試php文件變成提示下載的問題
哈哈 我的問題解決了
感謝啊
--dante
5.?re: 讓Frameset居中,并且固定寬度的巧妙辦法
謝謝!方便又好用.
--Coker_Ye
閱讀排行榜
1.?JS,真是令我郁悶死了。。。(282)
2.?生活越來越有意思了!(281)
3.?我才知道ziddu...(279)
4.?現在的生活真無聊~(261)
5.?初試IDEA,實在太有挑戰性了(240)
評論排行榜
1.?我才知道ziddu...(0)
2.?初試IDEA,實在太有挑戰性了(0)
3.?現在的生活真無聊~(0)
4.?JS,真是令我郁悶死了。。。(0)
5.?生活越來越有意思了!(0)
links:
主站蜘蛛池模板:
亚洲一区二区三区在线观看网站
|
性感美女视频在线观看免费精品
|
精品无码一级毛片免费视频观看
|
国产精品亚洲w码日韩中文
|
免费看大黄高清网站视频在线
|
国产精品免费观看
|
国产又大又粗又长免费视频
|
亚洲av无码一区二区三区四区
|
伊人久久综在合线亚洲91
|
日本中文一区二区三区亚洲
|
97在线免费观看视频
|
一区二区三区免费高清视频
|
一级毛片免费在线
|
国产成人1024精品免费
|
在线免费视频你懂的
|
baoyu777永久免费视频
|
久久九九久精品国产免费直播
|
国产乱妇高清无乱码免费
|
国产成人精品免费大全
|
国产视频精品免费视频
|
免费a级毛片无码a∨免费软件
|
免费网站看av片
|
中文字幕免费在线看线人
|
18禁无遮挡无码网站免费
|
国外成人免费高清激情视频
|
亚洲XX00视频
|
精品亚洲综合久久中文字幕
|
日韩精品一区二区亚洲AV观看
|
亚洲成a人不卡在线观看
|
亚洲影院天堂中文av色
|
色吊丝免费观看网站
|
精品一区二区三区免费视频
|
无码一区二区三区免费
|
97视频免费在线
|
国产免费小视频在线观看
|
国产成人精品曰本亚洲79ren
|
久久精品国产亚洲网站
|
精品亚洲麻豆1区2区3区
|
亚洲av产在线精品亚洲第一站
|
亚洲av无码专区在线电影天堂
|
春意影院午夜爽爽爽免费
|