小编典典

JPA规范是否允许引用非主键列?

hibernate

JPA规范是否允许对非主键列的简单引用?

我想在引用中使用在Countrys表上有一个简单的替代/自然键(UNIQUE,NOT
NULL)列iso_code,但是Eclipse的Dali显示了验证错误,并且Hibernate抛出了MappingException。

是否允许这种常见情况?


阅读 377

收藏
2020-06-20

共1个答案

小编典典

@axtavt:看来您的答案不正确。我刚刚收到了来自“ Pro JPA 2.0”作者的电子邮件,他们自己也在从事JPA规范。

“在您的示例中,Zip类与某个国家/地区有关系:

public class Zip implements Serializable
{
    @Id
    @Column(name = "code")
    private String code;

    @Id
    @ManyToOne
    @JoinColumn(name = "country_code", referencedColumnName = "iso_code")
    private Country country = null;
    ...
}

这似乎是试图将country_code外键列指向Country表(不是PK)中的iso_code列。 JPA从未允许您创建这样的关系,
因为如果不指定国家/地区的PK,就无法唯一标识关系中的哪个国家/地区实例。当您到达派生的标识符部分时,您只是在解决问题,但问题似乎出在无效关系本身中。”

因此,JPA规范根本不允许将关系/ FK关联到非PK列…

2020-06-20