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 ではなく) バイナリであることを期待しない場合、どうなるかわかりません。これをグーグルで検索しましたが、正確なエラーを見つけることができませんでした。同様のエラーの解決策は...
- <プロパティ>に「長さ」を指定します。これにより、Hibernate が期待する型が変わりますが、検出される「バイナリ」型ではなく、常に何らかの種類の blob になります。
- プロパティ要素で「型」を宣言する代わりに、列要素をネストして、それに sql-type 属性を与えます。それは機能しますが、バインディングが MySQL に固有のものにもなるため、可能であれば避けたいと思います。
この設定で、この不一致の原因となる何か目立ったものはありますか? 「blob」の代わりに type="binary" を指定すると、Hibernate がバイナリではなく blob を期待するのはなぜですか?