У меня есть две JPA-сущности, связанные один-к-одному:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person extends IdentifiableObject {
private String firstName;
private String lastName;
private int age;
private LocalDate birthday;
@OneToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "passport_id")
private Passport passport;
}
@Entity
@Data
public class Passport extends IdentifiableObject {
private String series;
private String number;
private LocalDate issueDate;
private Period validity;
@OneToOne(optional = false, mappedBy = "passport")
private Person owner;
}
Они наследуются от общего класса:
@MappedSuperclass
@ToString
@Data
public abstract class IdentifiableObject {
@Id
@GeneratedValue
private Long id;
}
Я хочу сохранить их в базе H2 таким образом:
@Override
public void run(String... args) throws Exception {
Person person = new Person();
person.setAge(43);
person.setBirthday(LocalDate.now());
person.setFirstName("Hovard");
person.setLastName("Lovecraft");
Passport passport = new Passport();
passport.setSeries("1234");
passport.setNumber("456789");
passport.setOwner(person);
personRepository.save(person);
}
Но почему-то во время выполнения я получаю ошибку: Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: �������� NULL �� ��������� ��� ���� "PASSPORT_ID"
Что в этом коде не так? Что это за ошибка? Почему она произошла и как ее исправить?
Дополнение: при сохранение person не сохраняется в таблице passport. Почему так? Здесь Person владелец связи, поэтому при сохранении person должен сохраниться и passport.
person.setPassport(passport)забыли или нарочно не используете? – Sergey Sep 13 '19 at 08:13