簡體   English   中英

hibernate 使用@Data 注釋創建的“沒有實體的默認構造函數”

[英]hibernate "No default constructor for entity" created with @Data annotation

我正在嘗試使用 JpaRepository 設置數據庫表。 我有以下 model class:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Data;

@Data
@Entity
@Table
public class MyModel {
    @Id
    @GeneratedValue
    private final int id;
    private final String name;
    private final String imagePath;
}

當我運行我的應用程序時,表創建得很好。 我已經手動向表中添加了一行,但是當我嘗試使用repository.findById查找該行時,出現以下錯誤:

org.hibernate.InstantiationException: No default constructor for entity:  : com.mypackage.mypackage.model.MyModel

我對“無默認構造函數”錯誤感到困惑。 我以為@Data注釋自動為 class 創建了一個構造函數?

Hibernates 不使用不可變實體,它想要:

  • 一個空構造函數: public MyModel() {}
  • getter 和 setter

因此,只需刪除final修飾符,以便@Data為您生成所有這些。


啊,這就是它響鈴的原因,它與你的另一個問題有關 所以,是的,使用 Hibernate 實體,你不能輕易使用不可變實體。 如果您也需要這樣的構造函數,您仍然可以在@Data旁邊添加@AllArgsConstructor


編輯:正如Andrey B. Panfilov在評論中正確提出的那樣,@ @Data根本不應該在實體之上使用。 引用托本·詹森的話

底線是您可以使用@Getter@Setter@Builder批注而不會破壞您的應用程序。 您需要避免的唯一 Lombok 注釋是@Data@ToString@EqualsAndHashCode

暫無
暫無

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

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