У меня возникли проблемы с отображением байтового массива в базу данных MySQL в Hibernate, и мне было интересно, если я упускаю что-то очевидное. Мой класс выглядит примерно так:
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, но не смог найти точную ошибку. Решения для подобных ошибок были ...
- Укажите «длину» на . Это меняет то, что ожидает Hibernate, но это всегда разновидность большого двоичного объекта, а не двоичный тип, который он находит.
- Вместо того, чтобы объявлять «тип» в элементе свойства, вложите элемент столбца и присвойте ему атрибут sql-type. Это работает, но это также сделало бы привязку специфичной для MySQL, поэтому я хотел бы избежать ее, если это возможно.
Что-то выделяется в этой настройке, что может привести к этому несоответствию? Если я укажу type = "binary" вместо "blob", почему Hibernate ожидает двоичный объект вместо двоичного?