Java 如何在链接表上设置hibernate生成的外键约束名?
我想让Java 如何在链接表上设置hibernate生成的外键约束名?,java,hibernate,Java,Hibernate,我想让hibernate基于以下映射创建sql: @Entity public class MyBaseEntity { @EmbeddedId private MyEmbeddable id; @ManyToMany @JoinTable(name = "mybaseentity_mymode", //sets the linking table name joinColumns = { @JoinColumn(name = "fk_p
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;
}
我们通过以下方式定义自定义ForeignKey约束 为此,您可以使用
@ForeignKey(name=“something\u something”)
您正在定义@OneToOne
,@ManyToOne
映射,您还可以使用嵌入@JoinColumn
中的@ForeignKey
,如下所示:
@JoinColumn(name = "your_id", foreignKey = @ForeignKey(name = "something_something"))
对于@manytomy
关系,您可以使用唯一约束
,外键
和嵌入在@JoinTable
但是,我不确定它是否能按您想要的方式定义约束。解决方案如下:第二个约束是通过使用逆*
参数设置的
@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
inverseJoinColumns = @JoinColumn(name = "fk_mode", referencedColumnName = "id"),
inverseForeignKey = @ForeignKey(name = "fk_mode_id"))
private Set<MyModes> modes;
@manytomy
@JoinTable(name=“mybaseentity\u mymode”,//设置链接表名称
joinColumns={
@JoinColumn(name=“fk_param1”,referencedColumnName=“param2”),//@Id param
@JoinColumn(name=“fk_pram2”,referencedColumnName=“param2”)},//@Id param
foreignKey=@foreignKey(name=“fk\u myembeddable\u id”),//合同名称
inverseJoinColumns=@JoinColumn(name=“fk_mode”,referencedColumnName=“id”),
inverseForeignKey=@ForeignKey(name=“fk\u mode\u id”))
私有集模式;
我如何创建一个由两个PK组成的密钥映射?(如@EmbeddedId
此处mybaseentity_参数1,mybaseentity_参数2
)?请参阅上面的我的更新。我可以使用@JoinTable
和@jointcolumn
命名其中一个约束。但是我怎么能说出剩下的一个呢?
@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
inverseJoinColumns = @JoinColumn(name = "fk_mode", referencedColumnName = "id"),
inverseForeignKey = @ForeignKey(name = "fk_mode_id"))
private Set<MyModes> modes;