2011-07-18 35 views
0

我有一個彙總,並從2頁不同的表groupes查詢:

SELECT co.name AS companyName, f.destination_id, COUNT(f.id) AS numberOfFlights FROM companies co INNER JOIN flights f ON co.c_id = f.company_id GROUP BY co.id, co.name , f.destination_d 命名查詢更復雜的基於Hibernate

和,我想它的XML映射文件保存爲一個命名查詢。 我的問題是: 1.正如你所看到的,並非所有的結果字段都是任何表格中的實際列 - 我怎樣才能把它告訴地圖文件? 2.我應該在哪些xml中保存它 - 在compant.hbm.xml或flight.hbm.xml中,或者 - 是否有方法將它保存在hibernate.cfg.xml中?

我在網上搜索了一些高級的例子,但是找不到任何符合這種複雜功能的東西(雖然它不是那麼複雜......)。

任何人都可以提供一個我可以學習的好例子,或者可以指導我自己嗎?

+0

你要使用查詢在很多地方還是隻是一個方法? –

回答

3

對於問題1,請查看ResultTransformer。只需創建一個具有相同名稱的查詢結果的豆,並把它傳遞給使用ResultTransformer在Transformers.aliasToBean通話,就像這裏所說: Hibernate: Mapping custom column names in stored procedure named query

對於問題2,至少在我們的項目,我們」一直在把我們的命名查詢到只包含查詢XML文件,指的是它從hibernate.cfg.xml中這一行:

<mapping resource="queries.hbm.xml" /> 
+0

令人難以置信的答案!有效!非常感謝! – Assaf

1

我使用JPA,我beleive也由Hibernate支持,並且簡單地創建下META-INF合適的目錄中的XML文件,然後從我的persistence.xml引用它

<persistence-unit name="xxx"> 
    <jta-data-source>jdbc/xxx</jta-data-source> 
    <mapping-file>META-INF/jpql/Xxx.xml</mapping-file> 

當我有一個「額外」的數據,如數量,我經常定義一個結果類用合適的cnmstructor,然後在我的查詢中使用

select new MyClass(thing, computedValue etc ...) 

。看起來Hibernate支持這種方法。

+0

不錯,但我不能使用JPA(限制...)。無論如何,我從你的回答中學到了很多東西,謝謝。 – Assaf

+0

據我瞭解,選擇新不是特定於JPA,直接Hibernate支持它。 – djna