2012-11-15 99 views
0

我有一個應用程序必須根據環境使用Oracle或嵌入式H2數據庫運行。到目前爲止,我使用的是一個MySQL數據庫,而不是嵌入式的H2數據庫,但決定遷移。從H2嵌入Hibernate加載BLOB表

我使用Hibernate 3.3.1GA(並且受到限制,所以我無法更新)。 Oracle和MySQL都能正常工作,但是當我嘗試使用H2數據庫時,它一直處於掛起狀態。問題似乎是BLOB(序列化的java對象)的列。即使表格是空的,執行也會掛起。

SLF4J輸出(日誌級別ALL):

TableMetadata.java:org.hibernate.tool.hbm2ddl.TableMetadata:<init>:62 INFO table found: DATABASE.PUBLIC.JAVA_OBJECTS 
org.hibernate.tool.hbm2ddl.TableMetadata:<init>:63 INFO columns: [id, last_update, markdeleted, class, object] 
org.hibernate.connection.DriverManagerConnectionProvider:closeConnection:152 TRACE returning connection to pool, pool size: 1 

此時程序似乎掛起。早期的日誌輸出看起來很正常,當不使用這個表(從hibernate.cfg.xml中刪除)時,程序啓動正常。

的hibernate.cfg.xml(節選)

<property name="hibernate.connection.driver_class">org.h2.Driver</property> 
<property name="hibernate.connection.url">jdbc:h2:file:database</property> 
<property name="hibernate.connection.username">sa</property> 
<property name="hibernate.connection.password"></property> 
<property name="hibernate.default_schema">PUBLIC</property> 
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property> 
<property name="connection.pool_size">1</property> 
<property name="current_session_context_class">thread</property> 
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

表的創建字符串:

CREATE TABLE java_objects (
    id int(11) NOT NULL AUTO_INCREMENT, 
    class varchar(255) NOT NULL, 
    object blob NOT NULL, 
    last_update timestamp AS CURRENT_TIMESTAMP, 
    markDeleted tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id) 
) ; 

最後是實體XML

<hibernate-mapping> 
    <class name="server.DataBean" table="java_objects"> 
     <id name="id" column="id"> 
      <generator class="native" /> 
     </id> 
     <property name="type" column="class" /> 
     <property name="object" not-null="true"> 
      <column name="object" sql-type="BLOB" /> 
     </property> 
     <property name="lastUpdate" column="last_update" type="timestamp" /> 
     <property name="markDeleted" type="boolean" /> 
    </class> 
</hibernate-mapping> 

有誰知道我是什麼做錯了?什麼是h2在處理斑點時期望不同?

+0

你可以嘗試一個絕對的數據庫URL,例如'jdbc:h2:file:/ databases/test'而不是'jdbc:h2:file:database'嗎? –

+0

試過了,沒有幫助。問題不是數據庫文件沒有找到,而是這個特定的表不能被加載。如下所示,它似乎通過更改爲HSQLDialect來解決。 –

回答

0

問題可能已經與org.hibernate.dialect.H2Dialect

更改爲HSQLDialect工作。不過,是否有一個潛在的問題?