Hibernate找不到实体构造器

时间:2019-06-21 16:36:55

标签: java hibernate jpa

我还有另一个冬眠问题。 我正在尝试接收所有具有最新消息的项目。为此,我尝试获取所有消息,按它们的项目ID对其进行分组,然后将max函数应用于更新的列。 我的查询的构建如下所示:

WillPopScope

但是我收到异常,

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));

,它无法将结果转换回消息实体。我必须定义一个适当的构造函数吗?那将是非常不幸的,因为它包含其他实体,这使查询非常困难。并且无法将所有具有jointype权限的消息与上述查询一起使用,不支持sicne jointype权限。有什么建议可以获取具有上述查询结果ID的Message实体列表?

任何帮助都非常重要。

编辑:消息类别:

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

1 个答案:

答案 0 :(得分:2)

由于您仅选择了以下两列:

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

您需要为查询结果提供一个构造函数,该构造函数由两件事组成:

  • Message_.ID(长ID)的对象
  • Message_.UPDATED的对象(更新日期)

因此,可以使用所有args构造函数创建一个包含这些字段的自定义对象。这也称为投影。另一种更简单的方法是使用这两个参数在现有实体中创建一个构造函数。

public Message(long id, Date updated) {
     this.id = id;
     this.updated = updated;
}