好的,所以我在这里读了很多问题,但仍然无法理解它是如何工作的并且没有给出错误。按照我的逻辑,如果 @Data 有final 字段,它就会创建一个RequiredConstructor。 @Entity 需要一个 noArgConstructor 所以我也做了它。 这是我的用户类:
@Data
@Entity
@NoArgsConstructor(force = true)
public class User implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private final String username;
private final String password;
private final String fullname;
private final String street;
private final String city;
private final String state;
private final String zip;
private final String phoneNumber;
}
但是现在在另一个类中,如果我想创建一个如下所示的新 User 对象,我无法做到。
public User toUser(PasswordEncoder passwordEncoder) {
return new User(username, passwordEncoder.encode(password),
fullname, street, city, state, zip, phone);
}
编辑:我将 @RequiredArgConstructor 添加到 User 类中,现在它不会给我错误。问题已解决,但我不明白它是如何工作的。
当您添加
@NoArgsConstructor
时,它会覆盖 @RequiredArgsConstructor
中的 @Data
,这会强制您指定它。但是,如果您有最终字段,则您不想使用 NoArgsConstructor,因为在构造之后,无法设置它们,因此它们永远不会有值。
另外,请注意,您真的不想将@Data与@Entity一起使用,主要是因为它附带的EqualsAndHashcode。