java - determinePrimaryKeyJoinColumnName() 是否曾在 Hibernate 5 ImplicitNamingStrategy 中使用过?

标签 java hibernate

我正在使用 hibernate 5 并实现了 ImplicitNamingStrategy 接口(interface)。在其他方法中,有两种方法称为 determinePrimaryKeyJoinColumnName(...) 和 determineJoinColumnName(...)。在 java 文档中,它说明了 determinePrimaryKeyJoinColumnName:

Determine the column name related to {@link javax.persistence.PrimaryKeyJoinColumn}. In * {@code hbm.xml} terms, this would be a {@code } defined for a {@code } * or a {@code } (others?)

我用 PrimaryKeyJoinColumn 注释了我的连接并且代码有效,但是名称从未通过 determinePrimaryKeyJoinColumnName(...) 路由,而是通过 determineJoinColumnName(...) 路由。

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

最佳答案

@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 仅在一处调用 determinePrimaryKeyJoinColumnName() Ejb3JoinColumn.java#L719 .但我不知道在什么情况下会发生这种情况。

我也遇到过这样的问题,当尝试为 Hibernate 5 实现 Hibernate 4 NamingStrategy 的适配器时。您可以引用 ImprovedNamingStrategy for Hibernate 5额外的注释。

我尝试实现 Hibernate 5 Implicit Naming Strategy .

关于java - determinePrimaryKeyJoinColumnName() 是否曾在 Hibernate 5 ImplicitNamingStrategy 中使用过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38263233/

相关文章:

Hibernate:检查对象是否存在

java - 不同 Hibernate session 中对象的可见性

java - JPA - 在运行时更改表

java - 如何从对话框 fragment 打开新 Activity

java - 需要更改前端的建议

java - 从 intellij 中的同一项目文件夹运行多个 java 程序

java - 在 Java 迭代中将数据保存到表的有效方法

Java方法不返回输出?

mysql - Hibernate:如何创建两个表的关系?

mysql - hibernate 无法读取另一台服务器保存的条目