【发布时间】:2016-09-09 14:53:37
【问题描述】:
总之
JPA 文档说CollectionTable.joinColumns 属性是“引用实体主表的集合表的外键列。”
我可以让它引用的不是实体表的主键列,而是另一个具有唯一值的列吗?
详情
有一个带有以下表格的旧数据库(简化):
staff:
user_id (int)
user_name (varchar, primary key)
staff_privileges:
id_user (int)
privileges_id (int)
privileges_status (boolean)
现在我正在将 Hibernate 引入项目并尝试将此表映射到实体:
@Entity
@Table(name = "staff")
public class User {
@Column(name = "user_id")
private Integer userId;
@Id
@Column(name = "user_name")
private String userName; // primary key column (legacy, cannot be changed)
@ElementCollection
@CollectionTable(name = "staff_privileges", joinColumns = @JoinColumn(name = "id_user"))
@MapKeyColumn(name = "privileges_id")
@Column(name = "privileges_status")
private Map<Integer, Boolean> privileges; // privilegeId <-> isEnabled
}
不起作用,因为@CollectionTable 创建了对主键的引用:staff_privileges.id_user -> staff.user_name (primary key)。
应该是:staff_privileges.id_user -> staff.id_user。
有没有办法覆盖这个参考?是否有任何 Hibernate 或 JPA 注释?我想保持简单,尽可能不引入任何新的实体或嵌入。
【问题讨论】: