Что происходит в базе данных SQL, когда мы используем вложенный объединенный столбец в entity

#java #sql #spring #many-to-one

#java #sql #spring #многие к одному

Вопрос:

Я просматриваю некоторый код, и он использует вложенный @JoinColumn для одной из ассоциаций, как показано ниже:

 @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "QuestId"), @JoinColumn(name = "GuildId")})
private GuildQuests guildQuest;
 

Я понимаю, что когда я делаю что-то вроде следующего:

 @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumns(name="GuildQuestId")
private GuildQuests guildQuest;
 

Я создаю столбец с именем GuildQuestId в таблице, и он имеет ограничение внешнего ключа для объекта GuildQuests .

Однако, что будет делать вложенный @JoinColumn (первый фрагмент кода)?

Ответ №1:

В вашем первом фрагменте говорится, что вы указываете несколько внешних ключей для одной и той же ассоциации.

Пример:

 @ManyToOne
@JoinColumns({
    @JoinColumn(name="ADDR_ID", referencedColumnName="ID"),
    @JoinColumn(name="ADDR_ZIP", referencedColumnName="ZIP")
})
public Address getAddress() { return address; }
 

Редактировать:
На самом деле вы не создаете никаких внешних ключей (оба примера) в базе данных. Если вы используете, например, Hibernate, Hibernate не создает никаких внешних ключей на самом уровне базы данных.