[英]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() {}
因此,只需刪除final
修飾符,以便@Data
為您生成所有這些。
啊,這就是它響鈴的原因,它與你的另一個問題有關。 所以,是的,使用 Hibernate 實體,你不能輕易使用不可變實體。 如果您也需要這樣的構造函數,您仍然可以在@Data
旁邊添加@AllArgsConstructor
。
編輯:正如Andrey B. Panfilov在評論中正確提出的那樣,@ @Data
根本不應該在實體之上使用。 引用托本·詹森的話:
底線是您可以使用
@Getter
、@Setter
和@Builder
批注而不會破壞您的應用程序。 您需要避免的唯一 Lombok 注釋是@Data
、@ToString
和@EqualsAndHashCode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.