0

我正在尝试在两种类型之间创建多对多关系,其中一种是枚举类型。假设第一个模型是用户,第二个模型是角色。一个用户可以有多个角色,一个角色可以属于多个用户。

我希望能够编写简单的代码,例如:

if (user.getRoles().contains(Role.ADMIN)) {
  //do something
}

有谁知道这是否可能?我已经看到有一个 @Enumerated Hibernate 注释,但这看起来对我没有用。

我目前已经通过为链接表创建模型来实现解决方案,但这非常混乱。非常感谢任何帮助。

-齿轮

更新:有人可以指定如何在模型上持久化 EnumSet 吗?上面的信息仍然存在,我希望用枚举类型创建一个多对多关系。

4

3 回答 3

2

你看过EnumSet类吗?这可以将多个 Enum 实例存储在您可以调用的集合contains()

于 2009-12-03T14:59:31.483 回答
1

我想我已经找到了解决问题的好方法。如果我将枚举类型保持为简单的东西,例如:

public enum Role implements Serializable{

    USER, MODERATOR, ADMIN;

}

然后在我的用户模型上,我使用@CollectionOfElements 创建了一组角色,所以它看起来像这样:

  @CollectionOfElements(fetch = FetchType.EAGER)
  public Set<Role> getRoles() {
      return roles;
  }

  public void setRoles(Set<Role> roles) {
      this.roles = roles;
  }

Hibernate 似乎为这种关系创建了一个表(称为 user_roles),它可以按我的意愿工作(常规的 manyToMany 关系)。

希望这可以帮助某人。

-齿轮。

于 2009-12-04T12:05:36.097 回答
0

我们通常创建子类EnumUserType,然后在映射文件中指定这个类。

于 2009-12-03T15:02:32.177 回答