1

環境に応じて、Oracleまたは組み込みH2データベースで実行する必要のあるアプリケーションがあります。これまで、組み込みH2データベースの代わりにMySQLデータベースを使用していましたが、移行することにしました。

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が異なることを期待しているのは何ですか?

4

1 に答える 1

1

問題は org.hibernate.dialect.H2Dialect にあった可能性があります

HSQLDialect に変更すると機能します。それでも、根本的な問題はありますか?

于 2012-11-15T10:53:15.030 に答える