Hibernate динамические экземпляры с коллекциями, это возможно? - PullRequest
2 голосов
/ 25 июня 2009

Я хотел бы написать 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 потребуется один или несколько запросов для достижения этой цели, поскольку это приведет к созданию нескольких строк результатов для каждой сущности.

Кто-нибудь знает, возможно ли создать новый объект, который представляет собой комбинацию свойств и коллекций?

1 Ответ

3 голосов
/ 27 июня 2009

Извините, но это невозможно. Согласно спецификации JPA,

Тип результата запроса, указанный в предложение SELECT запроса является AN ENTITY тип абстрактной схемы, A Тип ГОСУДАРСТВЕННОГО ПОЛЯ - НЕ КОЛЛЕКЦИЯ -, результат агрегатной функции, результат строительства операции, ИЛИ НЕКОТОРАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ЭТИХ.

Вместо этого вы можете использовать следующее:

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

Таким образом, таким образом вы могли бы получать пользователей с вашими контактами

...