спящий единственный внешний ключ для многих таблиц - PullRequest
0 голосов
/ 27 апреля 2019

Можно ли добавить один внешний ключ для двух таблиц. Допустим, есть три таблицы Vendor, Customer и Contact. Хотите установить контакт как отношение @OneToMany. Таким образом, для этой мысли взять общий идентификатор с именем object_id и для object_type узнать, является ли он продавцом или клиентом.

в классе контактов

@Column(name = "object_type", nullable = false)
private String objectType;

@ManyToOne
@JoinColumn(name="object_id",referencedColumnName="id" ,insertable=false, updatable=false)
private Vendor vendor;

@ManyToOne
@JoinColumn(name="object_id",referencedColumnName="id",insertable=false, updatable=false)
private Customer customer;

Но это не добавление внешнего ключа для таблицы поставщиков и клиентов. Только один sql Hibernate при стрельбе

изменить контакт таблицы добавить ограничение FKj3890q987sngeflip2ex9b85j внешний ключ (object_id) Отзывы клиентов (id)

Могу ли я сделать это так или есть другой лучший способ справиться с этой ситуацией

1 Ответ

0 голосов
/ 27 апреля 2019

если (контакт является отношением один-ко-многим)

@OneToMany
@JoinColumn(name="object_id",referencedColumnName="id" ,insertable=false, updatable=false)
private List<Vendor> vendors;

@OneToMany
@JoinColumn(name="object_id",referencedColumnName="id",insertable=false, updatable=false)
private List<Customer> customer;

Иначе, если контакт много к одному, то вместо класса контакта определите внешние ключи в классах поставщиков и клиентов, каждый из которых будетиметь поле типа

@OneToMany
@JoinColumn(name="id",referencedColumnName="object_id" ,insertable=false, updatable=false)
private List<Contact> contacts;

Также следите за LazyFetch или лучше установить его на false

@LazyCollection(LazyCollectionOption.FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...