2012-02-15 9 views
6

मैं निम्न त्रुटिजेपीए/हाइबरनेट मानचित्र को MySQL ब्लॉब प्रकार में क्यों नहीं लगाया जा सकता है?

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 तालिका में तालिका ब्लॉब प्रकार के रूप में घोषित किया जाता है घोषित किया जाता है शिकायत कर रहा है मिला है। Hibernate क्यों मैप करना चाहता है और यह क्यों जोर देता है कि मैं TINYBLOB का उपयोग करता हूं?

धन्यवाद

उत्तर

11

आप columnDefinition विशेषता के साथ स्पष्ट रूप से प्रकार ब्लॉब सेट करने का प्रयास कर सकता है।

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

या @Lob एनोटेशन का उपयोग करें:: इस तरह

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

'columnDefinition' पोर्टेबल नहीं है, बाद मानक है। 'टाइप' हाइबरनेट में उपलब्ध है जबकि यह जेपीए में नहीं है। –

+0

मैंने एक्लिप्ससेंक और MySQL के साथ दूसरा किया है और यह सत्यापित कर सकता है कि यह अपेक्षित काम करता है। –

+0

मैंने उत्तर में अधिक जानकारी के लिए टिप्पणी जोड़ा है क्योंकि ओपी ने टैग जेपीए/हाइबरनेट का उल्लेख किया है, इसके काम के बारे में नहीं। –

2
@Column(columnDefinition="blob") 

मेरे लिए काम नहीं किया था। मेरे विनिर्देशों: - जेपीए - हाइबरनेट - MySQL

समाधान:

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

public MyClass { 
    @Lob 
    @Column(length=100000) 
    private byte[] myBlob; 
}   
संबंधित मुद्दे