我可以使用Hibernate Annotations自动将EnumSet映射到一系列布尔列吗?

时间:2009-03-05 18:35:31

标签: java hibernate persistence data-mapping

我有一个EnumSet,我认为映射到一系列布尔列会很好。这样可以轻松地使用SQL工具进行检查,并且可以灵活地更改可用的枚举值。但是,我真的不想为此手写所有的getter和setter。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

public enum Color { RED, GREEN, BLUE; }

数据库中有3个true / false列,每个可能的枚举值一个。然后,包含RED和BLUE的EnumSet应映射到:

RED    GREEN    BLUE
true   false    true

如果是这种情况,我所知道的唯一方法就是编写自己的org.hibernate.usertype.UserType实现。这是一个非常直接的任务,在Hibernate站点上提供了一些示例,例如here

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

  1. 使用org.hibernate.usertype.ParameterizedType并使用户类型可通过枚举类进行参数化。
  2. 根据枚举类的值,确定要读/写的列数和列数。
  3. 每次使用EnumSet时实例化类型。
  4. 考虑在一个表中映射多个集合的可能性,以及添加新枚举值将如何影响现有类型的工作。
  5. 这很容易相当于一整天的工作,但似乎很可行。希望你能从这里弄明白。