Java Hibernate找不到实体构造函数

Java Hibernate找不到实体构造函数,java,hibernate,jpa,Java,Hibernate,Jpa,我还有另一个hibernate问题。 我正在尝试接收所有包含最新消息的项目。为此,我尝试获取所有消息,根据它们的项目id对它们进行分组,并在更新的列上应用max函数。 我的查询如下所示: query.select(from).orderBy(builder.desc(from.get(Message_.UPDATED))).multiselect(from.get(Message_.ID),builder.max(from.get(Message_.UPDATED))).groupBy(from

我还有另一个hibernate问题。 我正在尝试接收所有包含最新消息的项目。为此,我尝试获取所有消息,根据它们的项目id对它们进行分组,并在更新的列上应用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]
它无法将结果转换回消息实体。我必须定义一个合适的构造函数吗?这将是非常不幸的,因为它包含其他实体,使得查询非常困难。并且,将具有jointype权限的所有消息与上述查询联接不起作用,不支持sicne jointype权限。有什么建议可以让我得到一个消息实体列表,这些实体的id是上面查询的结果吗

非常感谢您的帮助

编辑:消息类:

@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
   }

因为您只选择了这两列:

.multiselect(
    from.get(Message_.ID),
    builder.max(from.get(Message_.UPDATED))
) 
您的查询结果需要有一个由两部分组成的构造函数:

  • 消息\ ID(长ID)的对象
  • 消息更新的对象(更新日期)
因此,创建一个包含这些字段的自定义对象,并使用所有args构造函数。这也称为投影。另一种更简单的方法是在现有实体中使用这两个参数创建构造函数

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

好?您没有显示您的
消息
类。添加了该类,但我看不出它有什么关系,因为hibernate normaly能够将其转换为消息,而无需为此查询特定的构造函数。您是否在
用户
项目
类上也有空的c'tor?所有字段都有setter?是的,我有,它们的JAX-RS端点工作得很好。只是这个特定的查询不起作用。最有可能的原因是max函数仍然是一个聚合,因此影响结果的签名并使其难以解析回(?)这对我来说很有用。我使用了createTupleQuery,它基本上实现了您描述的功能。你知道我怎样才能使我的查询只在一个属性上应用distinct子句吗?编辑:但我仍然需要另一个属性。该死,这对我没有帮助。使用JAX-RS编写Web应用程序,我所拥有的只是一个entityManager,它不提供使用这些东西的标准。但我读到了“拥有”条款。您是否知道有一个函数允许我定义“groupby项目具有最大的(from.get(“updated”)”)”?最大函数不适用于路径(编译时出错)。有点害怕为此提出其他问题创建一个新问题会更好,因为其他人也能找到我们的解决方案。然而,如果你想得到最新的(最近更新的)消息,你绝对可以使用having子句和imo