2014-09-30 38 views
2

我有三個類。 ClassA和ClassB是映射到數據庫中的經典POJO實體。我希望第三個ClassC使用HQL在數據庫中執行特定且複雜的查詢(未與任何表映射)。是否有可能在ClassC上添加@Entity註釋並將其僅保留爲只讀?JPA/HIBERNATE處理非POJO實體

我通過文件要找出一種方法來映射以下(樣品)的SQL語句:

select 
a.id, b.name, c.city 
from 
emp a, identity b, address c 
where 
a.id = b.id and a.id = c.id 

希望創建域對象和映射EMP,身份和地址。

我想要的只是一個對象,映射到sql語句的輸出。

public class Data { 
private int id; 
private String name; 
private String city; 
// ... and other details ... 
} 

從技術上講,這應該是存儲過程或視圖的工作。不幸的是,我無法更改數據庫。

任何幫助/指針,將不勝感激。

+0

爲什麼你想用@Entity創建一個類來創建HQL查詢?只有在類中具有數據庫中的映射表時,才必須使用實體註釋。 – Chaitanya 2014-10-01 09:33:53

+0

其實我想讓classC去執行一些報告。我想使用這個類,就像我用@Entity註解使用classA或ClassB一樣。在這個classC中,每個字段都是特定HQL請求的結果,以便我的應用程序仍然匹配MVC模式。 – user3770624 2014-10-02 23:29:51

回答

1

您可以創建非常複雜的SQL查詢作爲視圖並將您的實體映射到該實體。基本上,一個視圖只是一個只讀表(你可以把它作爲Oracle的讀寫器,但這是另一回事:)),所以任何hibernate映射都可以作爲只讀實體正常工作。我之前使用普通的Hibernate和hbm文件來完成這個任務。我從來沒有嘗試過使用JPA或註釋,但我不明白爲什麼它不起作用。

+0

謝謝你的回答。這是很好的方法,但我不想修改數據庫只執行一些HQl請求,並將每個HQL請求保存到classC的字段中,並且我想使用classC,就像我使用@Entity類一樣。 – user3770624 2014-10-02 23:27:58