我有一个EnumSet,我认为映射到一系列布尔列会很好。这样可以轻松地使用SQL工具进行检查,并且可以灵活地更改可用的枚举值。但是,我真的不想为此手写所有的getter和setter。
有没有人有一个聪明的解决方案,使用某种hibernate元数据将这个对象拆分成一堆属性?
谢谢!
答案 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类型映射,则必须执行以下操作:
org.hibernate.usertype.ParameterizedType
并使用户类型可通过枚举类进行参数化。EnumSet
时实例化类型。这很容易相当于一整天的工作,但似乎很可行。希望你能从这里弄明白。