Как назвать внешний ключ с помощью @CollectionTable в JPA?

Мне нужна помощь в решении нашей проблемы с именованием FK в JPA. У нас есть одна встраиваемая сущность, например Фу, который используется как коллекция в другом объекте Бар.

встраиваемая сущность:

@Embeddable
public class Foo{
    @Column(name = "foo1")
    private String foo1;

    @Column(name = "foo2")
    private String foo2;
}

основная сущность:

@Entity
@Table(name = "Bar")
public class Bar {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    @Id
    private Long id;

    @ElementCollection
    @CollectionTable(name = "foos", joinColumns = @JoinColumn(name = "bar_id", foreignKey = @ForeignKey(name = "foo_bar_fk"), nullable = false))
    private List<Bar> bars;
}

Когда я сгенерировал таблицы в базе данных (postgres), внешний ключ называется fdk44l345k64 вместо foo_bar_fk. Подскажите, как это исправить? Спасибо.

CollectionTable имеет "foreignKey", так почему вы устанавливаете его для JoinColumn ??
user3973283 10.08.2018 11:45

@BillyFrost, чтобы определить его свойства

Denis Stephanov 10.08.2018 11:46

и почему вы не используете foreignKey из @CollectionTable, а НЕ foreignKey из @JoinColumn ???

user3973283 12.08.2018 09:58

@BillyFrost, спасибо, это работает, но я не понимаю, как это работает. Почему я не могу установить его в JoinColumn, если мне нужно установить имя FK для этого столбца соединения?

Denis Stephanov 12.08.2018 12:54

Потому что foreignKey в этой аннотации предназначен для чего-то другого! Просто установите имя на foreignKey в @CollectionTable

user3973283 12.08.2018 16:27

@ElementCollection там не подходит, он предназначен для не-сущностей (поэтому Bar не будет работать) И почему у Bar есть собственная коллекция ??

Amalgovinus 06.08.2019 23:41

«Поскольку внешний ключ в этой аннотации предназначен для чего-то еще», очень информативно.

Dragas 11.05.2020 12:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
899
0

Другие вопросы по теме