2014-10-10 134 views
11

我正在使用JPA類創建數據庫。如何在@ManyToMany中設置ForeignKey名稱

如果我們有多對一關係,我們可以覆蓋ForeignKey的名字名字是這樣的:

@ManyToOne 
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY")) 
private Country country; 

在數據庫中,我們都會有這樣的結果:

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=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

+0

您是否嘗試過添加inverseForeignKey屬性? – Giovanni 2014-10-10 14:24:30

+0

@Giovanni是的,我已經更新了我的問題。我在我的問題中寫了這個(如果它是真的)。 – grep 2014-10-10 14:44:51

+1

你使用的是什麼版本的Hibernate?我記得在這方面看到一些錯誤:例如https://hibernate.atlassian.net/browse/HHH-8783。 – 2014-10-10 15:27:06

回答

0

這個問題是由於hibernate bug造成的。我正在測試休眠4.3.X.解決方案:更新休眠版本。該問題已在更新版本中修復

0

我猜你有一些罐子衝突存在。 我建議這樣做:

  1. 刪除以下罐:冬眠 - 公地Annotations和Hibernate-EntityManager的
  2. 再看看here如何更改 外鍵
0

的名字保持簡單,如果你可以修改DB結構,將會更容易生成一個外鍵

@OneToOne() 
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId") 
@ForeignKey(name="Fk_userdetails_vehicle") 
public Vehicle getVehicle() { 
    return vehicle; 
} 
相關問題