2013-02-13 42 views
2

來自實體框架背景我可以將我的ORM結果轉換爲包含完整後端模型數據子集的類。JPA EntityManager TypedQuery - 返回一個不同的類(ViewModel/DTO)比實體模型?

我有一個JAX-RS REST服務所在我平時喜歡

MyEntity result = em.createQuery(select e from MyEntity e ... blah blah blah). 

回來的東西,我知道我能做到這一點:

Object result = em.createQuery(select e.Title, e.Version, e.Date from MyEntity e... blah blah blah). 

但我可以或者是: 投我的結果到一個單獨的類或B命名我的字段在我的createquery中,以便他們在返回我的JSON時命名?

例如在.net土地我可以做這樣的事情....

(select new {Title = e.Title, Version = e.Version}) 

,然後施放此爲另一種類型。我嘗試使用typedquery和鑄造,但我得到了「類型X與返回類型Y不兼容」類型錯誤。

我的目標是返回一個特定的子集(視圖模型/ DTO)我的信息在特定場景中消費。

例如,我的模型非常龐大,我不想每次都返回大量的數據。

回答

7

是,創建非實體類型是可能的,使用JPA構造函數表達式即NEW關鍵字:

List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO(o.title, o.version) FROM Entity o").getResultList(); 

的DTO必須與所有相關領域的構造函數。

不需要鑄造。

+0

這工作完美,謝謝! – Yablargo 2013-02-13 15:33:51

+0

@Yablargo不客氣:) – kostja 2013-02-13 15:40:21