我在实体类之一中使用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
,然后它会抛出编译器错误,表明已定义无参数构造函数。
我无法理解为什么会发生这种情况。谁能指导一下为什么会发生这种情况?
要解决您的问题,您需要将
@NoArgsConstructor
和 @AllArgsConstructor
与 @Builder 注释一起使用,因为它需要全参数构造函数才能正常运行:
@Entity
@Table(name = "student_details")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {
您正在使用
@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-可能出错的地方/