JPA一对多映射键

时间:2011-03-28 02:09:17

标签: 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;

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我在黑暗中拍摄:)

如果要在UserRole中使用Role对象的name属性作为Map的键。您可以尝试将Role对象中的name属性设置为@Id。然后你的@MapKey(name =“role”)

希望这有帮助。如果这得到了帮助,我们可以讨论更多。我现在也试着理解这种东西。