4

我有一个 EnumSet,我认为映射到一系列布尔列会很好。这将使使用 SQL 工具进行检查变得容易,并且对可用枚举值的更改也具有弹性。但是,我真的不想为此手写所有的 getter 和 setter。

有没有人有一个聪明的解决方案,使用某种休眠元数据将此对象拆分为一堆属性?

谢谢!

4

1 回答 1

1

如果我理解正确,对于像这样的枚举:

public enum Color { RED, GREEN, BLUE; }

您将在数据库中有 3 个真/假列,每个可能的枚举值对应一个。然后一个EnumSet包含,比如说,红色和蓝色,应该映射到:

RED    GREEN    BLUE
true   false    true

如果是这种情况,我知道的唯一方法是编写自己的org.hibernate.usertype.UserType. 这是一项非常简单的任务,在 Hibernate 站点上提供了一些示例,例如,这里

编辑:我刚刚意识到事情必须更复杂一些。如果您希望在您的应用程序中为所有可能的情况使用一种 Hibernate 类型映射EnumSet,则必须执行以下操作:

  1. 使用org.hibernate.usertype.ParameterizedType枚举类并使用户类型可参数化。
  2. 根据枚举类的值,确定要读/写的列数和列数。
  3. 每次使用 an 时都实例化类型EnumSet
  4. 考虑在一个表中映射多个集合的可能性,以及添加新枚举值将如何影响现有类型的工作。

这很容易相当于一整天的工作,但似乎很可行。希望你从这里弄清楚。

于 2009-03-08T23:36:42.373 回答