Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用集合休眠动态实例化,可能吗?_Java_Hibernate_Orm_Hql - Fatal编程技术网

Java 使用集合休眠动态实例化,可能吗?

Java 使用集合休眠动态实例化,可能吗?,java,hibernate,orm,hql,Java,Hibernate,Orm,Hql,我想使用一个动态实例化编写一个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,

我想使用一个动态实例化编写一个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;

  ...      
}
公共类用户{
@列(name=“name”)
字符串名;
@ManyToMany(targetEntity=Contacts.class,fetch=FetchType.EAGER)
@JoinTable(name=“用户\部门\联系人”,
joinColumns=@JoinColumn(name=“DEPARTMENT\u ID”),
inverseJoinColumns=@JoinColumn(name=“USER\u ID”))
私人名单联系人;
...      
}
正如你们所看到的,我想要的就是创建一个新的对象,它有一些属性和实体集合

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


有人知道是否可以创建一个新对象,它是属性和集合的组合吗

对不起,这是不可能的。根据JPA规范

由指定的查询结果的类型 查询的SELECT子句是 实体抽象模式类型,一个 状态字段类型-不是集合-, 聚合函数的结果, 建设的结果 操作,或其中的某个序列

您可以改为使用以下选项:

select DISTINCT new x.y.UserDto(u) from User u LEFT JOIN FETCH u.contacts
因此,通过这种方式,您可以获取联系人的用户