2012-09-20 37 views
1

我有一個單向一對多對象在我的實體如何覆蓋默認的@JoinColumn生成的SQL名稱單列加入

@OneToMany(mappedBy="pub", cascade = CascadeType.ALL, orphanRemoval=true) 
@JoinColumn(name="reference") 

此實體和子實體都在FK和PK列「參考」

當SQL生成的這個連接,它使用對象名+ _ + PK的默認‘pub_reference’,而忽略我傳入的名稱。

我可以更改名稱=到任何東西,它是總是被忽略。

即使它是單列連接,我如何覆蓋名稱的默認行爲?

父實體

@OneToMany(mappedBy="pub", cascade = CascadeType.ALL, orphanRemoval=true) 
@JoinColumn(name="bob") 
private Collection<PubDisplayText> pubDisplayText; 

兒童實體

private Pub pub; 

@Id 
@XmlTransient 
    public Pub getPub() { 
    return pub; 
} 

public void setPub(Pub pub) { 
    this.pub = pub; 
} 

參考http://docs.oracle.com/javaee/6/api/javax/persistence/JoinColumn.html#name%28%29

回答

1

單向一個一對多的映射必須使用一個連接表。通過指定@ OneToMany.mappedBy元素,您意味着雙向一對多。因此,映射從「擁有」映射(由「mappedBy」指定的映射)中獲取連接列名稱。由於沒有在那裏指定,所以使用默認連接列。