2

我想编写一个使用动态实例化的 hql 查询,其中一个列表作为它的参数之一。

简化示例:

具有动态实例化的 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",
           joinColumns=@JoinColumn(name="DEPARTMENT_ID"),
           inverseJoinColumns=@JoinColumn(name="USER_ID"))
  private List<Contacts> contacts;

  ...      
}

如您所见,我想要的只是创建一个具有实体的一些属性和集合的新对象。

我可以理解 Hibernate 需要一个或多个查询来实现这一点,因为这将为每个实体生成多个结果行。

有谁知道是否可以创建一个由属性和集合组合而成的新对象?

4

1 回答 1

3

抱歉,这是不可能的。根据 JPA 规范,

查询的 SELECT 子句指定的查询结果的类型是 AN ENTITY 抽象模式类型、A STATE-FIELD 类型 - NOT A COLLECTION -、聚合函数的结果、构造操作的结果或 SOME SEQUENCE OF这些。

您可以改用以下内容:

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

因此,通过这种方式,您可以获取包含您的联系人的用户

于 2009-06-27T05:00:50.583 回答