Hibernates正在使用JPA @Enumerated注释生成VARBINARY列。我正在使用带有JTDS驱动程序的SQL Server 2005。映射很简单:
@Basic
@Enumerated(EnumType.ORDINAL)
private MyEnum foo;
我原本希望Hibernate生成一个整数列?我也尝试过EnumType.STRING(期望varchar列)没有成功。
请注意,我的应用运行正常;列类型使得检查数据库变得困难,并且在戳到数据库时发出adhoc SQL。
答案 0 :(得分:1)
可能是SQL Server特定的问题(也许您可以查看Hibernate SQL Server方言源以找出所使用的数据类型)。
通常,使用EnumType.ORDINAL
映射可能不是一个好主意,因为在普通Java代码中使用枚举不是一个好主意:添加或删除枚举值可能很容易破坏您的代码,因为它可能会更改现有枚举值的序数。这在Effective Java, 2nd Ed第6章第31项中有更详细的讨论。
答案 1 :(得分:1)
这是一个愚蠢的用户错误。与我在问题中发布的内容相反,我搞砸了“污垢简单”的映射。我没有将我的成员变量声明为MyEnum,而是将其改为:
@Basic
@Enumerated(EnumType.ORDINAL)
private Enum foo;
当然Hibernate必须存储二进制数据,因为我告诉它我想存储任意枚举值。将foo的类型更改为MyEnum“修复”了问题。
答案 2 :(得分:0)
我无法重现我正在使用的Hibernate版本的问题,但我的猜测是Hibernate无法将enum
属性识别为@Enumerated
属性(MyEnum
是enum
,对吗?)并将其视为Serializable
。
我知道JPA规范说可以将@Basic
与枚举一起使用,但是你可以试试吗?