1

我有一个应用程序必须根据环境与 Oracle 或嵌入式 H2 数据库一起运行。到目前为止,我使用的是 MySQL 数据库而不是嵌入式 H2 数据库,但决定迁移。

我使用 Hibernate 3.3.1GA(并且受到限制,因此无法更新)。使用 Oracle 和 MySQL 一切正常,但是当我尝试使用 H2 数据库时,它一直挂起。问题似乎是带有 BLOB(序列化 Java 对象)的列。即使表是空的,执行也会挂起。

SLF4J 输出(日志级别全部):

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 在处理 blob 时有什么不同的期望?

4

1 回答 1

1

问题可能出在 org.hibernate.dialect.H2Dialect

更改为 HSQLDialect 有效。仍然存在潜在的问题吗?

于 2012-11-15T10:53:15.030 回答