2014-02-18 60 views
0

在我的代碼中,實體類的字段有一個CLOB列。這對Oracle很好,但是當我嘗試將MySQL用作數據庫時,它看起來CLOB類型會導致問題,因爲MySQL不支持CLOB。控制檯錯誤是如何讓Hibernate將CLOB轉換爲MySQL類型

13:35:27錯誤[main] org.hibernate.tool.hbm2ddl.SchemaUpdate 您的SQL語法錯誤;檢查對應於您的MySQL服務器版本使用附近的正確的語法手動 'CLOB, messageSubject LONGTEXT, senderEmailAddress VARCHAR(255), ' 在行7 [主]

Java代碼片斷是:

@Column(length = 4000) 
private String messageSubject; 

@Column(columnDefinition = "CLOB") 
private String messageBody; 

,這裏是我的entityfactory

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="runtime" /> 
    <property name="dataSource"> 
     <bean class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="jndiName" value="jdbc/cggruntime" /> 
     </bean> 
    </property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" /> 
      <property name="generateDdl" value="true" /> 
      <property name="showSql" value="false" /> 
     </bean> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.jdbc.batch_size">10</prop> 
      <prop key="hibernate.archive.autodetection">class</prop>   

      <!-- Activate Second-Order Cache for Entities and Queries --> 
      <prop key="hibernate.cache.use_second_level_cache">false</prop> 
      <prop key="hibernate.cache.use_query_cache">false</prop> 
     </props> 
    </property> 
</bean> 

我的問題是,有沒有什麼辦法來配置Hibernate使CLOB可以自動轉換到加時賽她支持的數據類型(如文本)?

謝謝

回答

0

MySQL絕對支持CLOB。將Java字符串轉換爲MySQL CLOB的正確語法如下:

@Lob 
@Column(name = "columnNameForTheMysqlColumnHere") 
private String messageBody; 
+0

是否有關於MySQL支持CLOB的任何參考/鏈接?在您使用@Lob的代碼中。這工作,但MySQL創建類型爲「longtext」的列。實際上,如果我像這樣在列註釋中添加「CLOB」:@Column(columnDefinition =「CLOB」),控制檯中總是有錯誤「org.hibernate.tool.hbm2ddl.SchemaUpdate SQL中有錯誤語法;請查看與您的MySQL服務器版本相對應的手冊,以便在「CLOB,messageSubject longtext,senderEmailAddress varchar(255)」附近使用正確的語法。刪除CLOB使代碼正常工作。 – danny

+0

CLOB作爲columnDefinition不受支持。 MySQL只識別'@ Lob'註釋,然後使用上下文來確定它是否是clob或blob。使用基本MySQL創建查詢將該列定義爲CLOB,然後使用字符串上的'@ Lob'來訪問它。 – gravityplanx