[英]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.