在Hibernate 5 ImplicitNamingStrategy中曾经使用过DetermPrimaryKeyJoinColumnName()吗?

时间:2016-07-08 09:27:08

标签: java hibernate

我正在研究hibernate 5并实现了ImplicitNamingStrategy接口。在其他方法中,有两个方法称为determinePrimaryKeyJoinColumnName(...)和determineJoinColumnName(...)。在java doc中,它说的是DetermPrimaryKeyJoinColumnName:

  

确定与{@link javax.persistence.PrimaryKeyJoinColumn}相关的列名。在        * {@code hbm.xml}条款,这是为{@code}定义的{@code}        *或{@code}(其他人?)

我使用PrimaryKeyJoinColumn注释了我的连接并且代码正常工作,但名称永远不会通过determinePrimaryKeyJoinColumnName(...)进行路由,而是通过determineJoinColumnName(...)。

我认为这是一个错误我错了吗?

1 个答案:

答案 0 :(得分: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;

}

Hibernate将使用xxxYY作为列名。但是,如果您没有指定名称

@Entity
@PrimaryKeyJoinColumn
public class ValuedCustomer extends Customer {

    @Column
    private String valuedCustomerName;

    }

}

Hibernate不会使用determinePrimaryKeyJoinColumnName()来生成名称。所以,看起来,这是一个错误。

Hibernate只在一个地方Ejb3JoinColumn.java#L719调用determinePrimaryKeyJoinColumnName()。但我无法确定这种情况会发生。

当我尝试为Hibernate 5实现Hibernate 4 NamingStrategy的适配器时,我也遇到过这样的问题。您可以参考ImprovedNamingStrategy for Hibernate 5获取其他注释。

我尝试实施Hibernate 5 Implicit Naming Strategy