我想使用动态实例化编写一个 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 需要一个或多个查询来实现这一目标,因为这将为每个实体生成多个结果行。
有谁知道是否可以创建一个由属性和集合组合而成的新对象?
最佳答案
抱歉,这是不可能的。根据JPA规范,
The type of the query result specified by the SELECT clause of a query is AN ENTITY abstract schema type, A STATE-FIELD type - NOT A COLLECTION -, the result of an aggregate function, the result of a construction operation, OR SOME SEQUENCE OF THESE.
您可以使用以下内容:
select DISTINCT new x.y.UserDto(u) from User u LEFT JOIN FETCH u.contacts
这样,您就可以获取具有您的联系人的用户
关于java - Hibernate 动态实例化集合,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043438/