簡體   English   中英

項目 Lombok + Hibernate 沒有實體的默認構造函數

[英]Project Lombok + Hibernate No Default Constructor for Entity

我有一個看起來像這樣的雇主類:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class Employer {

  private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "employer")
  private List<Offer> offerList = new ArrayList<>();

  private String name;
  private String location;
  private String description;
  private int companySize;

  public Employer(String name, String location, String description) {
    this.name = name;
    this.location = location;
    this.description = description;
  }
}

在 localhost:8080/employers 上發送 GET 請求讓我:

ERROR 6154 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity:  : com.krdkta.internship_for_you.model.Employer; nested exception is org.hibernate.InstantiationException: No default constructor for entity:  : com.krdkta.internship_for_you.model.Employer] with root cause

即使顯然有一個 Lombok Annotation 定義了這個無參數構造函數,但我仍然收到這個錯誤。 將 Lombok 與 Hibernate 一起使用是否有任何禁忌症:)?

Lombok 在編譯期間被調用(技術上是它和注釋處理器)。 而 Hibernate 在運行時使用的時間要晚得多。

事實上,從任何運行時框架的角度來看,使用 lombok 生成的無參數構造函數和“手動”創建的無參數構造函數之間沒有區別。

所以直接回答你的問題:不,沒有矛盾。

現在,我相信您使用了類似 Maven 的東西,其中您已將 lombok 添加為依賴項,並且在 Maven 編譯您的類的情況下它應該足夠了。 但是,如果您在 IDE 中使用 lombok(例如,從您的 IDE 中運行主類),您可能需要執行其他步驟:

例如,在 IntelliJ 中,您應該轉到Settings -> Compiler -> Annotation Processors並啟用 annotation post processing。 這個問題已經在這里過了,所以我沒有太多要補充的。

安裝 lombok 插件也很好。 它具有“delombok”集成,因此您可以直接從您的 IDE 中查看 lombok 究竟生成了什么。

您能像這樣更改注釋的順序嗎?


@Builder
@Data
@Entity
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class Employer {

你可以使用它。 這項工作適用於我的項目。

@Entity
@Table
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employer {}

暫無
暫無

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

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