Я хочу, чтобы hibernate
создать SQL базу на следующем отображении:Как установить имя внешнего ключа, сгенерированное спящим режимом на соединительной таблице?
@Entity
public class MyBaseEntity {
@EmbeddedId
private MyEmbeddable id;
@ManyToMany
@JoinTable(name = "mybaseentity_mymode", //sets the linking table name
joinColumns = {
@JoinColumn(name = "fk_param1", referencedColumnName = "param2"), //@Id param
@JoinColumn(name = "fk_pram2", referencedColumnName = "param2")}, //@Id param
foreignKey = @ForeignKey(name = "fk_myembeddable_id")) //the contraint name
private Set<MyModes> modes;
}
@Embeddable
public class MyEmbeddable {
private String param1;
private String param2;
}
@Entity
public class MyMode {
@Id
private long id;
private String code;
}
Каждый MyBaseEntity
может иметь несколько режимов. И тот же MyMode
может быть связан с несколькими базовыми объектами.
Вопрос: как определить сгенерированное имя CONSTRAINT
и UNIQUE
внутри автогенерируемого связующего стола?
До сих пор я использовал @JoinTable
и два определения @JoinColumn
, чтобы установить ограничение ссылки @EmbeddedId
. Но ссылка на ограничение внешнего ключа для объекта MyMode
по-прежнему автогенерируется.
Результирующий SQL до сих пор с автогенерируемая имена:
CREATE TABLE public.mybaseentity_mymode
(
mybaseentity_param1 character varying(255) NOT NULL,
mybaseentity_param2 character varying(255) NOT NULL,
modes_id bigint NOT NULL,
CONSTRAINT mybaseentity_mymode_pkey PRIMARY KEY (mybaseentity_param1, mybaseentity_param2, modes_id),
CONSTRAINT fk9tr9k9gtbqcpvoxfv2hqop6ta FOREIGN KEY (modes_id)
REFERENCES public.mymode (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_myembeddable_id FOREIGN KEY (fk_param1, fk_param2)
REFERENCES public.mybaseentity (param1, param2) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
И как я могу создать отображение «ForeignKey» самого ключа, состоящего из двух pks? (например, '@ EmbeddedId' здесь' mybaseentity_param1, mybaseentity_param2')? – membersound
См. Мое обновление выше. Я мог бы назвать одно из ограничений с помощью '@ JoinTable' и' @ JoinColumn'. Но как я могу назвать оставшуюся? – membersound