0

У меня есть две 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.

typemoon
  • 2,517

0 Answers0