2012-02-15 6 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 

コラムHibernateは

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属性で明示的にBLOB型を設定しようとすることができます。

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

または@Lobアノテーションを使用します:このような

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

'columnDefinition'は後に標準で、移植性がありません。 'type'はJPAにはないが、hibernateで利用可能です。 –

+0

私はEclipseLinkとMySQLで2番目の作業を行い、期待通りに動作することを確認できます。 –

+0

OPにはJPA/Hibernateというタグが記載されているので、その作業についてではなく、私は答えに追加のコメントを追加しました。 –

2
@Column(columnDefinition="blob") 

私のために動作しませんでした。 私の仕様: - JPA - Hibernateは - MySQLの

ソリューション:

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

public MyClass { 
    @Lob 
    @Column(length=100000) 
    private byte[] myBlob; 
}   
関連する問題