1

我用 Hibernate 弄湿了我的脚,我遇到了一个我找不到任何解决方案的问题。

我有一个接口MyInterface和一个实现该接口的枚举:

class MyInterface {
    void someMethod();
}

enum MyEnum implements MyInterface {

    INST1, INST2;

    @Override
    public void someMethod() {
        // ...
    }
}

(我还有一些其他的实现,MyInterface但我认为这并不重要。)

现在我正在尝试使用每个类层次结构方案一个表来映射MyInterface(其中MyEnum之一)的实现。我知道如何将普通枚举映射为属性,也知道如何映射普通子类,但我不知道如何进行组合。混合两种技术如下

-- DOES NOT WORK. --

<subclass name="package.MyEnum" extends="package.MyInterface">
    <type name="org.hibernate.type.EnumType">
        <param name="enumClass">package.MyEnum</param>
    </type>
</subclass>

显然不支持。

任何帮助表示赞赏。

(我意识到我可以通过创建类似的东西来解决这个问题

class MyEnumWrapper implements MyInterface {
    MyEnum inst;

    public void someMethod() {
        inst.someMethod();
    }
}

在这种情况下,可以使用普通的子类映射,但如果可能的话,我宁愿避免这种情况。不过,我实现自定义 UserTypes 没有问题。)

4

0 回答 0