2012-02-15 32 views
6

BenNeden MySQL blob türüne JPA/hazırda bekletme eşlemesi gösterilemiyor?

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 

kolon hazırda

private byte[] messagePayload; 

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

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

MySQL tabloda tablo BLOB türü olarak bildirilmiş olarak ilan edilir şikayet aşağıdaki hata var. Neden Hazırda Bekletme, haritayı bulmak istemiyor ve neden TINYBLOB'u kullandığım konusunda ısrar ediyor?

Teşekkür

cevap

11

Sen columnDefinition nitelik ile açıkça tip damla ayarlamak için deneyebilirsiniz.

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

Ya @Lob notu kullanın: Bunun gibi

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

'columnDefinition' taşınabilir değildir, sonradan standarttır. JPA'da değilken "type" hazırda bekletme kullanılabilir. –

+0

EclipseLink ve MySQL ile ikinciyi yaptım ve beklendiği gibi çalıştığını doğrulayabilirim. –

+0

OP, JPA/Hibernate etiketlerinden bahsetmişken, çalışmasından ziyade cevaba daha fazla bilgi için yorum ekledim. –

2
@Column(columnDefinition="blob") 

benim için işe yaramadı. Benim özellikler: - JPA - hazırda - MySQL

Çözüm:

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

public MyClass { 
    @Lob 
    @Column(length=100000) 
    private byte[] myBlob; 
}   
İlgili konular