Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernates使用JPA@Enumerated注释生成VARBINARY列_Java_Hibernate_Orm_Jpa - Fatal编程技术网

Java Hibernates使用JPA@Enumerated注释生成VARBINARY列

Java Hibernates使用JPA@Enumerated注释生成VARBINARY列,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,Hibernates正在生成一个带有JPA@Enumerated注释的VARBINARY列。我使用的是SQLServer2005W/JTDS驱动程序。映射非常简单: @Basic @Enumerated(EnumType.ORDINAL) private MyEnum foo; 我希望Hibernate生成一个整数列?我还尝试了EnumType.STRING(应为varchar列),但没有成功 请注意,我的应用程序运行良好;列类型使检查数据库和在戳数据库时发出临时SQL变得困难。可能是SQL

Hibernates正在生成一个带有JPA@Enumerated注释的VARBINARY列。我使用的是SQLServer2005W/JTDS驱动程序。映射非常简单:

@Basic
@Enumerated(EnumType.ORDINAL)
private MyEnum foo;
我希望Hibernate生成一个整数列?我还尝试了EnumType.STRING(应为varchar列),但没有成功


请注意,我的应用程序运行良好;列类型使检查数据库和在戳数据库时发出临时SQL变得困难。

可能是SQL Server特有的问题(可能您可以查看Hibernate SQL Server方言源以了解所使用的数据类型)

一般来说,使用
EnumType.ORDINAL
映射可能不是一个好主意,因为同样的原因,在普通Java代码中使用枚举序数也不是一个好主意:添加或删除枚举值可能很容易破坏代码,因为它可能会更改现有枚举值的序数。第6章第31项对此进行了更详细的讨论


我也发现了。

我无法重现我正在使用的Hibernate版本的问题,但我猜测Hibernate不会将您的
enum
属性识别为
@Enumerated
属性(
MyEnum
enum
,对吧?),并将其视为
可序列化的

我知道JPA规范说可以将
@Basic
与枚举一起使用,但您尝试不使用它吗

这是一个愚蠢的用户错误。与我在问题中发布的内容相反,我弄乱了“极其简单”的映射。我没有将我的成员变量声明为MyEnum,而是使用以下内容:

@Basic
@Enumerated(EnumType.ORDINAL)
private Enum foo;
当然Hibernate必须存储二进制数据,因为我告诉它我想存储任意的枚举值。将foo的类型更改为MyEnum“修复”了该问题