Spring 数据 jdbc 似乎不适用于最终属性
Spring data jdbc seems not working with final attributes
我正在尝试 spring 数据 JDBC (1.1.0.M3)。我有一个 Formateur(教师)class,其中包含一个电子邮件属性(class 电子邮件)。电子邮件是不可变的 class。当我从数据库中检索所有教师时,我有以下
exception: java.lang.UnsupportedOperationException: Cannot set
immutable property fr.yestech.data.jdbc.domain.Email.email
似乎 spring 数据 JDBC 与 final 属性不兼容!
public class Formateur {
private @Id Long id;
private String nom;
@Embedded
private Email email;
...
}
电子邮件 class(不可变 class 所以没有二传手!)
public final class Email {
private final String email;
private static final Pattern EMAIL_PATTERN = Pattern.compile("^[_A-Za-z]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$");
private Email(String email) {
Objects.requireNonNull(email, "Adresse email doit être non null!");
if (!EMAIL_PATTERN.matcher(email).matches())
throw new IllegalArgumentException("L'adresse email est
invalide !");
this.email = email;
}
public static Email of(String email) {
return new Email(email);
}
...
}
申请
@SpringBootApplication
public class SpringJdbcApplication {
public static void main(String[] args) {
SpringApplication.run(SpringJdbcApplication.class, args);
}
@Bean
ApplicationRunner applicationRunner(FormateurRepository formateurRepository) {
return args -> {
Formateur teacher = Formateur.of("YesTech", Email.of("yestech@email.com"), Adresse.of("Goux"));
formateurRepository.save(teacher);
formateurRepository.findAll().forEach(System.out::println);
};
}
}
这确实是一个错误。
您可以通过添加 "wither"
来解决它
private Email withEmail(String email) {
return new withEmail(email);
}
它甚至可能是私人的。
我创建了 an issue for this,所以它很快就会得到修复。
我正在尝试 spring 数据 JDBC (1.1.0.M3)。我有一个 Formateur(教师)class,其中包含一个电子邮件属性(class 电子邮件)。电子邮件是不可变的 class。当我从数据库中检索所有教师时,我有以下
exception: java.lang.UnsupportedOperationException: Cannot set immutable property fr.yestech.data.jdbc.domain.Email.email
似乎 spring 数据 JDBC 与 final 属性不兼容!
public class Formateur {
private @Id Long id;
private String nom;
@Embedded
private Email email;
...
}
电子邮件 class(不可变 class 所以没有二传手!)
public final class Email {
private final String email;
private static final Pattern EMAIL_PATTERN = Pattern.compile("^[_A-Za-z]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$");
private Email(String email) {
Objects.requireNonNull(email, "Adresse email doit être non null!");
if (!EMAIL_PATTERN.matcher(email).matches())
throw new IllegalArgumentException("L'adresse email est
invalide !");
this.email = email;
}
public static Email of(String email) {
return new Email(email);
}
...
}
申请
@SpringBootApplication
public class SpringJdbcApplication {
public static void main(String[] args) {
SpringApplication.run(SpringJdbcApplication.class, args);
}
@Bean
ApplicationRunner applicationRunner(FormateurRepository formateurRepository) {
return args -> {
Formateur teacher = Formateur.of("YesTech", Email.of("yestech@email.com"), Adresse.of("Goux"));
formateurRepository.save(teacher);
formateurRepository.findAll().forEach(System.out::println);
};
}
}
这确实是一个错误。 您可以通过添加 "wither"
来解决它private Email withEmail(String email) {
return new withEmail(email);
}
它甚至可能是私人的。
我创建了 an issue for this,所以它很快就会得到修复。