簡體   English   中英

Hibernate找不到實體構造器

[英]Hibernate cannot find Entity Constructor

我還有另一個冬眠問題。 我正在嘗試接收所有具有最新消息的項目。 為此,我嘗試獲取所有消息,按它們的項目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的Message實體列表?

任何幫助都非常感謝。

編輯:消息類:

@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)的對象
  • Message_.UPDATED的對象(更新日期)

因此,可以使用所有args構造函數創建一個包含這些字段的自定義對象。 這也稱為投影。 另一種更簡單的方法是僅使用這兩個參數在現有實體中創建構造函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM