我在将字节数组映射到 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),我不知道会发生什么。我花了一些时间谷歌搜索,但找不到确切的错误。类似错误的解决方案是...
- 在 <property> 上指定“长度”。这改变了 Hibernate 期望的类型,但它总是某种类型的 blob,而不是它找到的“二进制”类型。
- 不要在 property 元素上声明“类型”,而是嵌套一个 column 元素并给它一个 sql-type 属性。那是可行的,但这也会使绑定特定于 MySQL,所以如果可能的话,我想避免它。
这个设置有什么突出的地方会导致这种不匹配吗?如果我指定 type="binary" 而不是 "blob",为什么 Hibernate 需要一个 blob 而不是二进制文件?