在Hibernate中将Java byte []映射到MySQL binary(64)
||
我在将字节数组映射到Hibernate中的MySQL数据库时遇到了一些麻烦,并且想知道我是否缺少明显的东西。我的课看起来像这样:
public class Foo {
private byte[] bar;
// Getter and setter for \'bar\'
}
该表在MySQL 5.5中的定义如下:
CREATE TABLE foo (
bar BINARY(64) NOT NULL)
Hibernate 3.6.2映射与此类似:
<hibernate-mapping>
<class name=\"example.Foo\" table=\"foo\">
<property name=\"bar\" column=\"bar\" type=\"binary\" />
</class>
</hibernate-mapping>
我仅使用hbm2ddl进行验证,因此在部署应用程序时出现此错误:
Wrong column type in foo for column bar. Found: binary, expected: tinyblob
如果在映射中使用type = \“ binary \”不会导致Hibernate期望列的类型为二进制(而不是tinyblob),我不知道会怎样。我花了一些时间在Google上搜索,但找不到确切的错误。类似错误的解决方案是...
在<属性>上指定\“ length \”。这改变了Hibernate期望的类型,但是它总是某种形式的Blob,而不是它找到的\“ binary \”类型。
不必在属性元素上声明\ type,而是嵌套一列元素,并为其赋予sql-type属性。这项工作,但是那也将使绑定特定于MySQL,因此,如果可能的话,我想避免这样做。
关于此设置的任何突出之处都会导致这种不匹配?如果我指定type = \“ binary \”而不是\“ blob \”,为什么Hibernate期望使用blob而不是二进制文件?
没有找到相关结果
已邀请:
3 个回复
完趣镐
这样做的主要缺点是您失去了DB引擎的独立性,这就是为什么大多数人首先使用休眠的原因。此代码仅适用于具有BINARY数据类型的数据库引擎。
诉嘎归亮
简而言之,这将执行该类以从数据库读取和写入数据。具体来说,使用方法nullSafeGet和nullSafeSet。 在我们的例子中,我们使用它来gzip压缩二进制数据,然后再将其写入数据库,并在读取时解压缩。这掩盖了使用该数据从应用程序压缩数据的事实。
谷靛
Hibernate Entitiy将具有以下代码来支持BINARY列