Java 我可以映射inJPA与非id的唯一目标的关系吗?

Java 我可以映射inJPA与非id的唯一目标的关系吗?,java,jpa,orm,Java,Jpa,Orm,我希望能够使用点符号从一个实体到另一个实体 假设我有一个表Users: id username acronym ----------------------- 1 john NASA 和一个表机构: id instname acronym --------------------------- 9 Natl. Air... NASA 由于历史原因,“用户”表不包含对机构id的引用,但首字母缩略词是唯一的 有没有可能在John.getInstitut

我希望能够使用点符号从一个实体到另一个实体

假设我有一个表
Users

id  username   acronym
-----------------------
 1  john       NASA
和一个表
机构

id  instname       acronym
---------------------------
 9  Natl. Air...   NASA
由于历史原因,“用户”表不包含对机构id的引用,但首字母缩略词是唯一的


有没有可能在
John.getInstitution().InstName()
中,从John的实体到NASA的名字之间点一点?我希望避免通过实体管理器运行查询。

答案显然是:“[T]JPA规范根本不允许将关系/FK用于非PK列”

您真的尝试过吗

就我所见,根据您的JPA提供商,可能支持或不支持以下映射

@Entity
public class Institution{

    @OneToMany(mappedBy = "institution")
    private Set<User> users;
}

@Entity
public class User {

    @ManyToOne
    @JoinColumn(name = "acronym", referencedColumName = "acronym")
    private Institution institution;

}
具有“正确”FK映射的实体:

@Entity
@Table(name = "vw_users")
public class User {

    @ManyToOne
    @JoinColumn(name = "institution_id")
    private Institution institution;

}

我认为你应该重新考虑你的数据结构。若首字母缩略词是唯一的,则应声明首字母缩略词为外键。如果首字母缩写词不唯一,则无法映射关系。不幸的是,我无法(轻松)更改模型。但这会有帮助吗?如果它声明为外键,它不一定是目标表中的主键吗?没错,如果使用Hibernate作为JPA提供程序,它就可以工作。但我喜欢你的观点和建议。
@Entity
@Table(name = "vw_users")
public class User {

    @ManyToOne
    @JoinColumn(name = "institution_id")
    private Institution institution;

}