【问题标题】:Can I map an EnumSet to a series of boolean columns automatically using Hibernate Annotations?我可以使用 Hibernate Annotations 自动将 EnumSet 映射到一系列布尔列吗?
【发布时间】:2009-03-05 18:35:31
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: java hibernate persistence data-mapping


    【解决方案1】:

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

    public enum Color { RED, GREEN, BLUE; }
    

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

    RED    GREEN    BLUE
    true   false    true
    

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

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

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

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

    【讨论】:

    • 谢谢...我是手工完成的,但您提供的可能是唯一的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 2011-01-25
    • 2011-05-24
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多