hibernate - 当我有@ManyToMany 时如何设置外键名称

标签 hibernate jpa foreign-keys naming

我正在使用 JPA 类创建数据库。
如果我们有 多对一 关系,我们可以像这样覆盖 ForeignKey 名称:

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY"))
private Country country;
在DB中,我们会有这样的结果:
enter image description here
好的,这很好。好结果!
但是当我有@ManyToMany 时,我将无法设置我自己的 FK 名称。
我怎样才能创建这个?我尝试这样的事情,但它不起作用:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "NEW_TABLE",  foreignKey = @ForeignKey(name = "FK_TEST"))
或者像这样:
@JoinTable(
        name="NEW_TABLE",
        joinColumns=
            @JoinColumn(name="ID1", referencedColumnName="ID",  foreignKey = @ForeignKey(name = "FK_DEV_ID")),
        inverseJoinColumns=
            @JoinColumn(name="ID2", referencedColumnName="ID", foreignKey = @ForeignKey(name = "FK_DEV_ZONE"))
    )  
或这个:
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="NEW_TABLE_2",
            joinColumns=
                @JoinColumn(name="ID1", referencedColumnName="ID", 
                            foreignKey = @ForeignKey(name = "FK_1")
                ),
            inverseJoinColumns=
                @JoinColumn(name="ID2", referencedColumnName="ID", 
                            foreignKey = @ForeignKey(name = "FK_2")
                ),
            
            foreignKey = @ForeignKey(name = "FK_1"),
            inverseForeignKey = @ForeignKey(name = "FK_2")
    )  

private List<MyObject> deviceZones;
它们不起作用。
我使用这个版本的 jar :
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.6.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.6.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.common</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>4.0.5.Final</version>
</dependency>


<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.2.Final</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.0.6.RELEASE</version>
</dependency>
我的java版本是1.8

最佳答案

我猜你那里有一些 jar 冲突。
我建议这样做:

  • 删除以下 jars:hibernate-commons-annotations 和 hibernate-entitymanager
  • 然后看here你如何改变
    外键名称
  • 关于hibernate - 当我有@ManyToMany 时如何设置外键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300983/

    相关文章:

    java - JPA 不明确的方法调用 isMember

    mysql 外键创建表

    java - 如何使 hbm2ddl schemaExport 将模式记录到标准输出?

    Hibernate复合键使用注释,有一个外键

    hibernate - 当我有许多字段的 Bean 类时,如何使用 HIbernate 注释省略 Hibernate 插入查询中的列?

    java - 我可以在 JpaRepository 的 saveAll 中混合更新和插入吗

    mysql - JPQL 未对空值进行分组

    java - 没有 EntityManager 的 detachedcriteria 和 detachedquery

    mysql - phpmyadmin mysql 外键

    mysql - 外键问题