Hibernate не может найти конструктор сущностей - PullRequest
0 голосов
/ 21 июня 2019

У меня есть другая проблема гибернации.Я пытаюсь получить все проекты, которые имеют самые последние сообщения.Для этого я пытаюсь получить все сообщения, сгруппировать их по идентификатору проекта и применить функцию max к обновленному столбцу.Мой запрос построен так, как показано здесь:

query.select(from).orderBy(builder.desc(from.get(Message_.UPDATED))).multiselect(from.get(Message_.ID),builder.max(from.get(Message_.UPDATED))).groupBy(from.get(Message_.PROJECT));

Но я получаю исключение,

[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: de.ls5.wt2.Message]

, когда он не может преобразовать Результат обратно в объект сообщения.Должен ли я определить правильный конструктор?Это было бы очень прискорбно, потому что он содержит другие объекты, что делает запрос очень сложным.И объединение всех сообщений с правом соединения типа с вышеупомянутым запросом не работает, право соединения типа sicne не поддерживается.Любой совет, как я могу получить список объектов сообщения, которые имеют идентификатор результата запроса выше?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Класс сообщения:

@Entity
public class Message {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;
    private Date created;
    private Date updated;
    @OneToOne
    private User creator;
    @OneToOne
    private Project project;
    private String content;

    public Message() {

    }
    //getter and setter
   }

1 Ответ

2 голосов
/ 21 июня 2019

Поскольку вы выбираете несколько следующих столбцов:

.multiselect(
    from.get(Message_.ID),
    builder.max(from.get(Message_.UPDATED))
) 

Вам нужен конструктор для результата запроса, состоящий из двух вещей:

  • Объект для Message_.ID (длинный идентификатор)
  • Объект для Message_.UPDATED (Дата обновления)

Итак, либо создайте пользовательский объект, содержащий эти поля, с конструктором всех аргументов. Это также называется проекцией. Другой и более простой способ - просто создать конструктор в существующей сущности с этими двумя параметрами.

public Message(long id, Date updated) {
     this.id = id;
     this.updated = updated;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...