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!
閱讀(974)
評論(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!
<
2009年12月
>
日
一
二
三
四
五
六
29
30
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
31
1
2
3
4
5
6
7
8
9
統計
隨筆 - 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.?生活越來越有意思了!(282)
3.?我才知道ziddu...(280)
4.?現在的生活真無聊~(262)
5.?初試IDEA,實在太有挑戰性了(240)
評論排行榜
1.?我才知道ziddu...(0)
2.?初試IDEA,實在太有挑戰性了(0)
3.?現在的生活真無聊~(0)
4.?JS,真是令我郁悶死了。。。(0)
5.?生活越來越有意思了!(0)
links:
主站蜘蛛池模板:
久久亚洲国产成人影院
|
亚洲国产精品一区二区久久
|
亚洲精品中文字幕无乱码麻豆
|
日本免费大黄在线观看
|
久久精品国产96精品亚洲
|
免费91最新地址永久入口
|
7m凹凸精品分类大全免费
|
亚洲a在线视频视频
|
91在线老王精品免费播放
|
久久亚洲国产精品成人AV秋霞
|
小草在线看片免费人成视久网
|
亚洲美女视频免费
|
色se01短视频永久免费
|
亚洲国产精品99久久久久久
|
国产麻豆剧传媒精品国产免费
|
无码 免费 国产在线观看91
|
亚洲中文字幕无码久久综合网
|
久别的草原电视剧免费观看
|
亚洲伊人久久精品
|
国产高清免费观看
|
91国内免费在线视频
|
91亚洲国产成人久久精品
|
日本一道综合久久aⅴ免费
|
国产免费久久久久久无码
|
亚洲精品在线观看视频
|
天堂在线免费观看中文版
|
国产精品午夜免费观看网站
|
久久久久无码精品亚洲日韩
|
大地资源在线观看免费高清
|
又大又硬又粗又黄的视频免费看
|
亚洲国产精品VA在线观看麻豆
|
无码中文在线二区免费
|
国产免费区在线观看十分钟
|
亚洲综合日韩中文字幕v在线
|
亚洲不卡无码av中文字幕
|
国产午夜精品免费一区二区三区
|
国产99在线|亚洲
|
亚洲中文字幕无码永久在线
|
在线观看免费人成视频
|
a级大片免费观看
|
欧洲亚洲综合一区二区三区
|