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在處理斑點時期望不同?
你可以嘗試一個絕對的數據庫URL,例如'jdbc:h2:file:/ databases/test'而不是'jdbc:h2:file:database'嗎? –
試過了,沒有幫助。問題不是數據庫文件沒有找到,而是這個特定的表不能被加載。如下所示,它似乎通過更改爲HSQLDialect來解決。 –