我正在使用 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额外的注释。
关于java - determinePrimaryKeyJoinColumnName() 是否曾在 Hibernate 5 ImplicitNamingStrategy 中使用过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38263233/