Почему нельзя конвертировать JPA / спящий режим в тип блоба MySQL? - PullRequest
6 голосов
/ 15 февраля 2012

Я получил следующую ошибку

Caused by: org.hibernate.HibernateException: Wrong column type in TestTable for column PAYLOAD. Found: blob, expected: tinyblob
    at org.hibernate.mapping.Table.validateColumns(Table.java:284)
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1174)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:387)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883)
    ... 60 more

Столбец, на который жалуется hibernate, объявлен как

private byte[]  messagePayload;

@Column(name="PAYLOAD")
public byte[] getMessagePayload() {
        return messagePayload;
}

public void setMessagePayload(byte[] messagePayload) {
 this.messagePayload = messagePayload;
}

Таблица в таблице MySQL объявлена ​​как тип BLOB.Почему Hibernate не хочет отображаться на него и почему он настаивает на том, чтобы я использовал TINYBLOB?

Спасибо

Ответы [ 4 ]

14 голосов
/ 15 февраля 2012

Вы можете попытаться явно установить тип blob с атрибутом columnDefinition . Как это:

@Column(name="PAYLOAD",columnDefinition="blob")

Или используйте аннотацию @Lob:

@Column(name="PAYLOAD")    
@Lob(type = LobType.BLOB)
3 голосов
/ 26 ноября 2012
@Column(columnDefinition="blob") 

У меня не сработало. Мои спецификации: - JPA - Спящий - MySQL

Решение:

ALTER TABLE `my_table_name` CHANGE `my_column` `my_column` LONGBLOB default NULL;

public MyClass {
   @Lob
   @Column(length=100000)
   private byte[] myBlob;
}         
0 голосов
/ 24 июля 2018

Здравствуйте, это работает для меня.

@Lob  
@Column(name = "CH_VAL_MODIFIEES")
private String valeurModifiee;

В моей базе данных у меня есть CH_VAL_MODIFIEES, созданный с помощью LONGTEXT DataType.

0 голосов
/ 20 июня 2018

Я пробовал это решение:

public class MySqlCustomDialect extends org.hibernate.dialect.MySQLDialect{

    public MySqlCustomDialect() {

        super();

        this.registerColumnType(-4, "blob");
        this.registerColumnType(-3, "blob");
        this.registerColumnType(-3, 16777215L, "blob");
        this.registerColumnType(-3, 65535L, "blob");
        this.registerColumnType(-3, 255L, "blob");
        this.registerColumnType(2004, "blob");

    }
}

Таким образом, я переопределил исходное значение для ColumnType, определенное в MySqlDialect.Это работает только если BLOB определяется как тип столбца в MySQL.У меня возник побочный эффект при попытке изменить тип столбца на LONGBLOB, как и ожидалось:

[longblob (Types # LONGVARBINARY)], но ожидается [blob (Types # BLOB)]

Простодля предыдущей перенастройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...