gpt4 book ai didi

java - Hibernate 找不到实体构造函数

转载 作者:行者123 更新时间:2023-11-30 01:49:13 25 4
gpt4 key购买 nike

我还有其他 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 right 连接所有消息不起作用,不支持 sicne jointype right 。有什么建议我可以获取具有上述查询结果 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))
)

您需要为查询结果创建一个由两部分组成的构造函数:

  • Message_.ID 对象(长 ID)
  • 消息对象_.UPDATED(更新日期)

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

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

关于java - Hibernate 找不到实体构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56707393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com