我想让hibernate
以下映射创建SQL基地:如何在链接表上设置hibernate生成的外键约束名?
@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