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;
}