2012-02-15 95 views
6

我有以下錯誤爲什麼不能將JPA/hibernate映射到MySQL blob類型?

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 

列休眠抱怨被聲明爲

private byte[] messagePayload; 

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

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

在MySQL表的表聲明爲BLOB類型。爲什麼Hibernate不想映射它,爲什麼它堅持使用TINYBLOB?

感謝

回答

11

你可以嘗試設置明確的類型斑點與columnDefinition屬性。就像這樣:

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

或者使用@Lob註釋:

@Column(name="PAYLOAD")  
@Lob(type = LobType.BLOB) 
+6

'columnDefinition'是不可移植的,就是後來的標準。 「類型」在休眠時可用,但不在JPA中。 – 2012-02-15 19:48:49

+0

我已經用EclipseLink和MySQL完成了第二次,並且可以驗證它是否按預期工作。 – 2012-02-20 19:00:44

+0

我已經添加了關於OP的更多信息的評論,因爲OP提到了JPA/Hibernate標記,而不是它的工作原理。 – 2012-02-21 16:37:18

2
@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; 
}   
相關問題