【发布时间】:2009-03-05 18:35:31
【问题描述】:
我有一个 EnumSet,我认为映射到一系列布尔列会很好。这将使使用 SQL 工具进行检查变得容易,并且对可用枚举值的更改也具有弹性。但是,我真的不想为此手写所有的 getter 和 setter。
有没有人有一个聪明的解决方案,使用某种休眠元数据将此对象拆分为一堆属性?
谢谢!
【问题讨论】:
标签: java hibernate persistence data-mapping
我有一个 EnumSet,我认为映射到一系列布尔列会很好。这将使使用 SQL 工具进行检查变得容易,并且对可用枚举值的更改也具有弹性。但是,我真的不想为此手写所有的 getter 和 setter。
有没有人有一个聪明的解决方案,使用某种休眠元数据将此对象拆分为一堆属性?
谢谢!
【问题讨论】:
标签: java hibernate persistence data-mapping
如果我理解正确,对于像这样的枚举:
public enum Color { RED, GREEN, BLUE; }
您将在数据库中有 3 个真/假列,每个可能的枚举值对应一个。然后一个包含红色和蓝色的EnumSet 应该映射到:
RED GREEN BLUE
true false true
如果是这样,我知道的唯一方法是编写自己的 org.hibernate.usertype.UserType 实现。这是一项非常简单的任务,在 Hibernate 站点上提供了一些示例,例如,here。
编辑:我刚刚意识到事情必须稍微复杂一些。如果您希望在您的应用程序中为所有可能的 EnumSet 提供一个 Hibernate 类型映射,则必须执行以下操作:
org.hibernate.usertype.ParameterizedType 并使用户类型可通过枚举类参数化。EnumSet 时实例化类型。这很容易相当于一整天的工作,但似乎相当可行。希望你能从这里弄清楚。
【讨论】: