Hibernate JoinColumn с конструктором POJO (без сущности) - PullRequest
0 голосов
/ 29 октября 2019

У меня есть POJO, который выглядит примерно так

@AllArgsConstructor
public class POJO {
  @Getter
  @Setter
  private String name;

  @Getter
  @Setter
  private int age;
}

Я использую этот POJO для установки значений из hql-запроса, как в

session.createQuery("Select new fullyQualifiedName.POJO(emp.name, emp.age) From Employee emp where emp.id = 1");

Недавно меня спросилисделать запрос на добавление свойства List в POJO. Например,

@AllArgsConstructor
public class POJO {
  @Getter
  @Setter
  private String name;

  @Getter
  @Setter
  private int age;

  @Getter
  @Setter
  private List<Hobby> hobbies;
}

Однако на данный момент я не знаю, как объединить таблицу Hobby , получить значения в виде списка и передать конструктору.

Каковы возможные способы сделать это?

1 Ответ

0 голосов
/ 29 октября 2019

Я не думаю, что вы можете достичь того, чего хотите, с помощью ключевого слова new. Возможно, другие могут быть более полезны для этой конструкции, но я не видел ни одного примера, предоставляющего коллекцию с ключевым словом new. Я думаю, что эта конструкция имеет некоторые ограничения.

Что касается предлагаемого решения:

  1. Измените ваш запрос на Select emp, h From Employee emp left join Hobby h where emp.id = 1. Вы также можете использовать внутреннее объединение в зависимости от вашего варианта использования.

  2. Установите собственный ResultTransformer для вашего объекта запроса. Что-то вроде:


    query.setResultTransformer(
        new ResultTransformer() {
            @Override
            public Object transformTuple(Object[] tuple, String[] aliases) {            
                return tuple;
            }
            @Override
            public List transformList(List collection) {
               //Each member of collection is a Object[], we are working at row level 
               //You should process the collection, eliminate duplicates etc and return a 
               //List containing a single POJO object
            }
        }
    );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...