В JPA @MapKey может быть только локальным полем.Вы можете попытаться использовать просто «роль» в качестве ключа, так как это должно быть похоже на использование имени роли.Или сопоставьте имя роли в пользовательской роли.Вы также можете просто отобразить его как List или Set и просто определить методы в своем классе для доступа к нему по ключу.
Если вы используете EclipseLink, вы также можете использовать метод в качестве ключа карты, чтобыопределите getRoleName () в UserRole, которое возвращает имя роли, и используйте его с @ MapKey.