JPA 一对多映射键

标签 jpa

我有以下内容

@OneToMany(mappedBy="role")
@MapKey(name="role.name")
private Map<String,UserRole> userRoles = new HashMap<String,UserRole>();

我想使用 UserRole 中 Role 对象的 name 属性作为 Map 的键,我该如何实现这一点。 @MapKey(name="role.name") 不起作用。

我的 UserRole.java 有以下内容

@ManyToOne
@JoinColumn(name="roleId")
private Role role;

最佳答案

在 JPA 中,@MapKey 只能是本地字段。 您可以尝试仅使用“角色”作为键,因为它应该类似于使用角色名称。 或者,将角色名称映射到 UserRole。 您还可以将其映射为 List 或 Set,并在类中定义方法以通过键访问它。

如果您使用 EclipseLink,您还可以使用方法作为映射键,因此您可以在 UserRole 中定义返回角色名称的 getRoleName(),并将其与 @MapKey 一起使用。

关于JPA 一对多映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453977/

相关文章:

java - Spring boot一对多连接从数据库获取重复的json

java - 如何在 Spring 上通过 OpenEntityManagerInViewFilter 处理多个 Entitymanager

jpa - 为什么实体类必须有一个@Id?

hibernate - 使用 JPA/Hibernate 进行继承映射

java - JPA 外键约束在 EntityManager 刷新时失败

Spring Boot + Spring Data JPA + 事务无法正常工作

java - “gomobile.user u”不能是 FROM 子句的第一个声明

spring-boot - 无论 CascadeTypes 如何,都无法在不删除父实体的情况下删除子实体?

java - NoSuchMethodError : javax. persistence.OneToOne.orphanRemoval()Z

java - 使用 hibernate 更新 mysql 数据库时锁定行