Java Hibernate找不到实体构造函数
我还有另一个hibernate问题。 我正在尝试接收所有包含最新消息的项目。为此,我尝试获取所有消息,根据它们的项目id对它们进行分组,并在更新的列上应用max函数。 我的查询如下所示: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
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)的对象
- 消息更新的对象(更新日期)
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