没有使用 Lombok 生成参数

问题描述 投票:0回答:2

我在实体类之一中使用Lombok:

@Entity
@Table(name = "student_details")
@Data
@Builder
public class Student {
    @Id
    private int studentId;
    private String studentName;
    private String courseEnrolled;
    private String rollNo;

当我运行此程序时,出现以下错误:

java: constructor Student in class com.example.student.entity.Student cannot be applied to given types;
  required: no arguments
  found:    int,java.lang.String,java.lang.String,java.lang.String

我尝试提供默认构造函数

@NoArgsConstructor
,然后它会抛出编译器错误,表明已定义无参数构造函数。

我无法理解为什么会发生这种情况。谁能指导一下为什么会发生这种情况?

java lombok
2个回答
0
投票

要解决您的问题,您需要将

@NoArgsConstructor
@AllArgsConstructor
与 @Builder 注释一起使用,因为它需要全参数构造函数才能正常运行:

@Entity
@Table(name = "student_details")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {

0
投票

您正在使用

@Builder
,如果没有其他构造函数,它还会自动生成具有访问级别包私有的 All-Args-Constructor,请参阅 lombok-doc for builder。 但是,您也可以使用
@Data
,它会生成
@RequiredArgsConstructor
,请参阅 lombok-doc for data (在您的情况下,它是一个无参数构造函数,因为没有最终字段)。 看起来
@Builder
没有生成构造函数,因为您已经拥有
@Data
中的无参数构造函数。

解决方案 1

@Builder
可以放在构造函数上,而不仅仅是一个类,这将消除关于应该使用什么构造函数的混乱。

解决方案2:不要将

@Data
放在类上,因为它只是其他注释的快捷方式。

另一个注意事项:通过将

@Data
放在实体类上,您会产生一些问题,因此我将采用解决方案 2,请参阅此处:https://jpa-buddy.com/blog/lombok-and- jpa-可能出错的地方/

© www.soinside.com 2019 - 2024. All rights reserved.