我正在使用 JPA 类创建数据库。
如果我们有 多对一 关系,我们可以像这样覆盖 ForeignKey 名称:
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY"))
private Country country;
在DB中,我们会有这样的结果:好的,这很好。好结果!
但是当我有@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 冲突。
我建议这样做:
外键名称
关于hibernate - 当我有@ManyToMany 时如何设置外键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300983/