Возможно, я полностью неправильно понял ForegignKey в JPA. Но в реальной базе данных, когда ваша таблица A имеет внешний ключ к другой таблице B. Тогда не должен ли этот ключ существовать в таблице B при сохранении / объединении таблицы A?
Вот пример моей проблемы:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
String name;
// getters and setters....
}
@Entity
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
@ManyToOne(targetEntity = Person.class)
@JoinColumn(name = "person_id", referencedColumnName = "id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT))
Person person;
// getters and setters
}
В моем мире, человек должен существовать в базе данных, чтобы животное могло быть сохранено. Но нет, я могу без проблем сохранить экземпляр питомца с Person = null. Теперь, конечно, я могу пометить ссылку на Person как @NotNull или необязательно = false, но это не то, чего я хочу достичь. Я хочу убедиться, что, когда я сохраняю питомца, владелец существует. Как мне это сделать? В этом случае я не могу сделать двухстороннее сопоставление с использованием @OneToMany in Person, так как у меня есть более 20 сущностей с ограничениями внешнего ключа для "Person"