为什么不能将JPA/hibernate映射到MySQL blob类型?

zig*_*ggy 6 java mysql hibernate jpa

我收到以下错误

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
Run Code Online (Sandbox Code Playgroud)

hibernate列抱怨声明为

private byte[]  messagePayload;

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

public void setMessagePayload(byte[] messagePayload) {
 this.messagePayload = messagePayload;
}
Run Code Online (Sandbox Code Playgroud)

MySQL表中的表被声明为BLOB类型.为什么Hibernate不希望映射到它,为什么它坚持使用TINYBLOB?

谢谢

bru*_*azi 14

您可以尝试使用columnDefinition属性显式设置类型blob .像这样:

@Column(name="PAYLOAD",columnDefinition="blob")
Run Code Online (Sandbox Code Playgroud)

或者使用@Lob注释:

@Column(name="PAYLOAD")    
@Lob(type = LobType.BLOB)
Run Code Online (Sandbox Code Playgroud)

  • `columnDefinition`不可移植,后来是标准的.`type`在休眠时可用,而它不在JPA中. (8认同)
  • 你的`@ Lob`注释来自哪里?JPA似乎没有`type`参数. (4认同)