У меня есть отношения @OneToOne JPA.Сохраняемые значения берутся из формы JSP.Я отладил свои коды:
id = 0
firstName = "john"
firstName = "doe"
security =
id = 0
username = "john1"
password = "pwd"
employee = null
Вот мои сущности:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@NotBlank(message = "First Name is a required field.")
private String firstName;
@NotBlank(message = "Last Name is a required field.")
private String lastName;
@Valid
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "employee", optional = false)
private Security security;
...
}
@Entity
public class Security {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@NotBlank(message = "Username is a required field.")
private String username;
@NotBlank(message = "Password is a required field.")
private String password;
@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "employee_id", nullable = false)
private Employee employee;
...
}
Я не понимаю, почему employee_id становится нулевым:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'employee_id' cannot be null
Я реализуюCommandLineRunner
со следующими кодами, и он работает:
Employee employee = new Employee();
employee.setFirstName("Julez");
employee.setLastName("Jupiter");
Security security = new Security();
security.setUsername("julez");
security.setPassword("pwd");
employee.setSecurity(security);
security.setEmployee(employee);
employeeRepository.save(employee);
Как Spring Boot / MVC или Spring Data JPA автоматически достигают аналога моего CommnadLineRunner
кода?Я искал много учебных пособий и вопросов здесь, в SO, но я мог найти только использование CommandLineRunner
и не использование формы.Спасибо.