Hibernate枚举映射

我需要事先将未实现接口的枚举映射到现有数据库,现有数据库使用@Enumerated(EnumType.STRING)将枚举存储在与所有者类相同的表中。

 class A { HasName name; } interface HasName { String getName(); } enum X implements HasName { John, Mary; public String getName() { return this.name(); } } enum Y implements HasName { Tom, Ann; public String getName() { return this.name(); } } 

在这种情况下应该如何处理映射? 持久化到数据库不会改变,因为实现接口的所有枚举都将具有不同的值,但我不确定如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化枚举使用指定的枚举类?Hibernate本身是否支持此function?)。

可以创建自定义UserType (例如这个 )并从映射中使用它

    com.example.MyEnum    

编辑:Hibernate带有它自己的EnumType(自hibernate-annotations中的3.2,因为hibernate-core中的3.6 – 在编写本文时并不知道它是在hibernate-annotations中,但是看到Diego的答案 )。

Hibernate提供org.hibernate.type.EnumType来映射枚举类型。 例如,

 package com.igalia.enumerates; public enum Status { BUSY, AVAILABLE; } package com.igalia.entities; class MyClass { private Status status; } 

然后,按如下方式进行Hibernate映射:

       com.igalia.enumerates.Status    

就是这样。 如果您更喜欢使用JPA注释而不是hbm.xml,请使用@Enumerated(EnumType.STRING)。 在这里查看:

Hibernate中的枚举