關(guān)于Hibernate Native sql query的詭異問題
當(dāng)要做連表查詢時(shí),比如a和b,如果a1和b1都有一個(gè)name字段,使用下面的sql語句:
select a.name, b.name from a1 a, b1 b
假設(shè)不作任何處理,毫無疑問返回的是object[]的List,object[0]是a.name, object[1]是b.name。但是,咋們想錯(cuò)了。。。object[0]和object[1]一樣是a.name,開始認(rèn)為是hibernate調(diào)用jdbc的resultset時(shí)使用了如getString("name")這樣的東東,所以得到的都是第0個(gè)值。好吧,加個(gè)別名試試:
select a.name as name1, b.name as name2 from a1 a, b1 b
這好像可以呀。。。但是卻報(bào)錯(cuò),找不到name列。。。
好吧,來個(gè)ResultTransformer吧!假設(shè)轉(zhuǎn)換目標(biāo)類為TestDTO.class:
public class TestDTO{
private String name1;
private String name2;


//getters and setters


}
這回應(yīng)該好了吧?還是一樣的錯(cuò)誤。。。
注意:使用ResultTransformer的時(shí)候,別名注射不能用{name1}這種形式的,這種形式只適用于addEntity的情況!
為什么我要用sql查詢?由于特殊情況,我使用一些和數(shù)據(jù)庫有依賴的函數(shù),以后轉(zhuǎn)數(shù)據(jù)庫要是知道不兼容也肯定是sql那塊的,而不是hql,解決問題就方便多了。(注:hql一樣可以用特定數(shù)據(jù)庫的函數(shù))而且我連的是多個(gè)表,每個(gè)表字段十來個(gè),如果用實(shí)體查詢的話,每一行就是三個(gè)對(duì)象,而我需要的只是5個(gè)字段而已。而且如果可以用ResultTransformer的話,操作起來也十分方便。
不知道有誰也遇到過同樣問題?還是說大家都不用hibernate進(jìn)行sql查詢,不管是什么情況?
得再次研究hibernate官方文檔了。。。從文檔的那一章中,完全沒有找到有同名字段然后又使用ResultTransformer的情況。。。
select a.name, b.name from a1 a, b1 b
假設(shè)不作任何處理,毫無疑問返回的是object[]的List,object[0]是a.name, object[1]是b.name。但是,咋們想錯(cuò)了。。。object[0]和object[1]一樣是a.name,開始認(rèn)為是hibernate調(diào)用jdbc的resultset時(shí)使用了如getString("name")這樣的東東,所以得到的都是第0個(gè)值。好吧,加個(gè)別名試試:
select a.name as name1, b.name as name2 from a1 a, b1 b
這好像可以呀。。。但是卻報(bào)錯(cuò),找不到name列。。。
好吧,來個(gè)ResultTransformer吧!假設(shè)轉(zhuǎn)換目標(biāo)類為TestDTO.class:









注意:使用ResultTransformer的時(shí)候,別名注射不能用{name1}這種形式的,這種形式只適用于addEntity的情況!
為什么我要用sql查詢?由于特殊情況,我使用一些和數(shù)據(jù)庫有依賴的函數(shù),以后轉(zhuǎn)數(shù)據(jù)庫要是知道不兼容也肯定是sql那塊的,而不是hql,解決問題就方便多了。(注:hql一樣可以用特定數(shù)據(jù)庫的函數(shù))而且我連的是多個(gè)表,每個(gè)表字段十來個(gè),如果用實(shí)體查詢的話,每一行就是三個(gè)對(duì)象,而我需要的只是5個(gè)字段而已。而且如果可以用ResultTransformer的話,操作起來也十分方便。
不知道有誰也遇到過同樣問題?還是說大家都不用hibernate進(jìn)行sql查詢,不管是什么情況?
得再次研究hibernate官方文檔了。。。從文檔的那一章中,完全沒有找到有同名字段然后又使用ResultTransformer的情況。。。
posted on 2009-06-11 09:57 xskow! 閱讀(975) 評(píng)論(4) 編輯 收藏 所屬分類: SSH探索