我收到以下错误
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?
由于
答案 0 :(得分:14)
您可以尝试使用 columnDefinition 属性明确设置类型blob。像这样:
@Column(name="PAYLOAD",columnDefinition="blob")
或使用@Lob注释:
@Column(name="PAYLOAD")
@Lob(type = LobType.BLOB)
答案 1 :(得分:3)
@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;
}
答案 2 :(得分:0)
我已经尝试过此解决方案:
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");
}
}
这样,我已经覆盖了MySqlDialect中定义的ColumnType的原始值。它仅在BLOB在MySQL中定义为列类型时才有效。如预期的那样,我尝试将列类型更改为LONGBLOB时遇到了副作用:
[longblob(Types#LONGVARBINARY)],但期望[blob(Types#BLOB)]
仅用于先前的重新配置。
答案 3 :(得分:-1)
你好,这对我有用。
@Lob
@Column(name = "CH_VAL_MODIFIEES")
private String valeurModifiee;
在我的数据库中,我创建了一个 LONGTEXT 数据类型CH_VAL_MODIFIEES
。