2016-07-08 49 views
2

我正在使用hibernate 5並實現了ImplicitNamingStrategy接口。在其他方法中,有兩個方法,分別稱爲determinePrimaryKeyJoinColumnName(...)和determineJoinColumnName(...)。在Java文檔,它說,大約determinePrimaryKeyJoinColumnName:IsPrimaryKeyJoinColumnName()曾經在Hibernate中使用5 ImplicitNamingStrategy?

確定與{@link javax.persistence.PrimaryKeyJoinColumn}列名。在 * {@code的hbm.xml}而言,這將是一個{@code}的{@code}定義 *或{@code}(別人?)

我批註我的加入PrimaryKeyJoinColumn和代碼工作,但名稱永遠不會通過determinePrimaryKeyJoinColumnName(...),但通過determineJoinColumnName(...)路由。

我錯了,認爲這是一個錯誤?

回答

1

@PrimaryKeyJoinColumn只能用於@JoinColumn@OneToOne映射。在這種情況下,不會使用額外的連接列,當然,不會生成此類「不存在的列」的名稱。

@PrimaryKeyJoinColumn也可以用於繼承。舉例

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "someDiscriminator") 
public class Customer { 

    @Id 
    @GeneratedValue 
    private Long customerPid; 

    @Column 
    private String customerName; 

} 

@Entity 
@PrimaryKeyJoinColumn(name = "xxxYY") 
public class ValuedCustomer extends Customer { 

    @Column 
    private String valuedCustomerName; 

} 

休眠將使用xxxYY作爲列名。但如果你沒有指定名稱

@Entity 
@PrimaryKeyJoinColumn 
public class ValuedCustomer extends Customer { 

    @Column 
    private String valuedCustomerName; 

    } 

} 

休眠將不會使用determinePrimaryKeyJoinColumnName()來生成一個名稱。所以,看起來,這是一個錯誤。

Hibernate只在一個地方撥打determinePrimaryKeyJoinColumnName()Ejb3JoinColumn.java#L719。但我不能在這種情況發生。

當嘗試爲Hibernate 5實現Hibernate 4 NamingStrategy的適配器時,我也遇到過這樣的問題。您可以參考ImprovedNamingStrategy for Hibernate 5瞭解其他注意事項。

而我嘗試執行Hibernate 5 Implicit Naming Strategy

相關問題