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;