Мне нужна помощь в решении нашей проблемы с именованием 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. Подскажите, как это исправить? Спасибо.
@BillyFrost, чтобы определить его свойства
и почему вы не используете foreignKey
из @CollectionTable
, а НЕ foreignKey
из @JoinColumn
???
@BillyFrost, спасибо, это работает, но я не понимаю, как это работает. Почему я не могу установить его в JoinColumn, если мне нужно установить имя FK для этого столбца соединения?
Потому что foreignKey
в этой аннотации предназначен для чего-то другого! Просто установите имя на foreignKey
в @CollectionTable
@ElementCollection там не подходит, он предназначен для не-сущностей (поэтому Bar не будет работать) И почему у Bar есть собственная коллекция ??
«Поскольку внешний ключ в этой аннотации предназначен для чего-то еще», очень информативно.
CollectionTable
имеет "foreignKey", так почему вы устанавливаете его дляJoinColumn
??