Сопоставление байта Java [] с двоичным кодом MySQL (64) в Hibernate

У меня возникли проблемы с отображением байтового массива в базу данных 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, но не смог найти точную ошибку. Решения для подобных ошибок заключались в том, чтобы ...

  1. Указать "длину" в . Это меняет то, что ожидает Hibernate, но это ' s всегда представляет собой разновидность blob вместо «двоичного» типа, который он находит.
  2. Вместо объявления «типа» в элементе свойства вложите элемент столбца и присвойте ему атрибут sql-type. Это работает, но это также сделало бы привязку специфичной для MySQL, поэтому я хотел бы по возможности избежать этого.

Есть ли что-нибудь особенное в этой настройке, что могло бы вызвать это несоответствие? Если я укажу type = "binary" вместо "blob", почему Hibernate ожидает blob вместо двоичного?

7
задан spaaarky21 13 May 2011 в 20:25
поделиться