java - Hibernate 动态实例化集合,可能吗?

标签 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, 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/

相关文章:

java - 列表未存储在数据库中 - Hibernate Spring

java - 为什么 Hibernate 要求列表索引可以为空?

python - 如何在 Django 中按特定顺序构建查询集

java - 为什么我的 JNA 使用应用程序没有以正确的方式使用react?

java - 如何选择安全消息传递前端和符合 HIPAA 的数据库解决方案?

java - 在 Spring MVC + Hibernate 应用程序中的某个类中获取方言

hibernate - 无法在 postgres 数据库中使用 hibernate 注释创建唯一约束

java - 可以将具有推断类型的局部变量重新分配给不同的类型吗?

java - 仅删除不是单词开头的元音

java - 双向 @ManyToMany JSON 映射的无限递归