2009-06-25 29 views
2

我想寫一個hql查詢,使用一個動態實例和一個列表作爲其參數之一。Hibernate動態實例與集合,有沒有可能?

簡單的例子:

一個HQL查詢與動態實例:

select new x.y.UserDto(u.name, u.contacts) from User u where u.xyz=:param1 ... 

和我的DTO類的構造函數是:

public class UserDto { 
    private String name; 
    private List contacts; 

    public UserDto(String name, List contacts) { 
     this.name = name; 
     this.contacts = contacts; 
    } 
    ... 
} 

與實體映射:

public class User { 
    @olumn(name="NAME") 
    String name; 

    @ManyToMany(targetEntity= Contacts.class, fetch = FetchType.EAGER) 
    @JoinTable(name="USER_DEPARTMENT_CONTACTS", 
      [email protected](name="DEPARTMENT_ID"), 
      [email protected](name="USER_ID")) 
    private List<Contacts> contacts; 

    ...  
} 

所以,你可以看到我想要的就是創建一個具有一些屬性和實體集合的新對象。

我可以理解,Hibernate需要一個或多個查詢來實現這一點,因爲這會爲每個實體生成多個結果行。

有誰知道是否有可能創建一個新的對象,它是屬性和集合的組合?

回答

3

對不起,但它是不可能的。根據JPA規範,

類型由 一個查詢的SELECT子句中指定的查詢結果的是AN ENTITY抽象模式類型,A 狀態字段類型 - 不是一個集合 - , 的結果一個集合函數,一個構造操作的結果 ,或者這些的一些序列。

你可以使用,而不是執行以下操作:

select DISTINCT new x.y.UserDto(u) from User u LEFT JOIN FETCH u.contacts 

所以,這樣你將有用戶與您的聯繫人獲取

相關問題