我正在使用JPA類創建數據庫。如何在@ManyToMany中設置ForeignKey名稱
如果我們有多對一關係,我們可以覆蓋ForeignKey的名字名字是這樣的:
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY"))
private Country country;
在數據庫中,我們都會有這樣的結果:
好吧,這是不錯。好結果!
但是當我擁有@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=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
您是否嘗試過添加inverseForeignKey屬性? – Giovanni 2014-10-10 14:24:30
@Giovanni是的,我已經更新了我的問題。我在我的問題中寫了這個(如果它是真的)。 – grep 2014-10-10 14:44:51
你使用的是什麼版本的Hibernate?我記得在這方面看到一些錯誤:例如https://hibernate.atlassian.net/browse/HHH-8783。 – 2014-10-10 15:27:06