2012-04-25 5 views
3

提供されたマッピングに基づいて自動的に作成されるメモリデータベースで実行するSpring環境を設定しようとしています。実行中にログにDDL文が実行されるのを見ることができますが、hibernateが作成された表にデータを挿入しようとすると、 '表が見つかりません'という例外が発生します。
インメモリデータベースは作成されませんが、ログにはDDLが実行されたことが表示されます

何が問題になりますか?

春3.1.1およびHibernate 4.1.1およびH2バージョン1.3.165を使用する。

ログは、(左のみrevelant記録)のようになります。

INFO at '25-04-2012 13:23:56.318' by thread 'main' from category 'org.hibernate.tool.hbm2ddl.SchemaExport': 
HHH000227: Running hbm2ddl schema export 
DEBUG at '25-04-2012 13:23:56.318' by thread 'main' from category 'org.hibernate.SQL': 

    drop table DUMMIES if exists 
Hibernate: 
    drop table DUMMIES if exists 
DEBUG at '25-04-2012 13:23:56.318' by thread 'main' from category 'org.hibernate.SQL': 

    create table DUMMIES (
     id bigint generated by default as identity, 
     title varchar(255), 
     primary key (id), 
     unique (title) 
    ) 
Hibernate: 
    create table DUMMIES (
     id bigint generated by default as identity, 
     title varchar(255), 
     primary key (id), 
     unique (title) 
    ) 
INFO at '25-04-2012 13:23:56.334' by thread 'main' from category 'org.hibernate.tool.hbm2ddl.SchemaExport': 
HHH000230: Schema export complete 
INFO at '25-04-2012 13:23:56.334' by thread 'main' from category 'org.springframework.context.support.ClassPathXmlApplicationContext': 
Bean 'mySessionFactory' of type [class org.springframework.orm.hibernate4.LocalSessionFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 
INFO at '25-04-2012 13:23:56.631' by thread 'main' from category 'org.springframework.orm.hibernate4.HibernateTransactionManager': 
Using DataSource [org.springframework.[email protected]] of Hibernate SessionFactory for HibernateTransactionManager 
WARN at '25-04-2012 13:23:56.865' by thread 'main' from category 'org.hibernate.engine.jdbc.spi.SqlExceptionHelper': 
SQL Error: 42102, SQLState: 42S02 
ERROR at '25-04-2012 13:23:56.865' by thread 'main' from category 'org.hibernate.engine.jdbc.spi.SqlExceptionHelper': 
Table "DUMMIES" not found; SQL statement: 
insert into DUMMIES (id, title) values (null, ?) [42102-165] 

beans.xmlのは次のようになります( 'mypackageと' 完全なパッケージ名を置き換えるものです):

<bean id="myDataSource" 
    class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> 
    <property name="driverClass" value="org.h2.Driver" /> 
    <property name="url" value="jdbc:h2:mem:" /> 
    ... 
</bean> 

<bean id="mySessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="packagesToScan"> 
     <array> 
      <value>mypackage.entities</value> 
     </array> 
    </property> 
</bean> 

<bean id="myTransactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mySessionFactory" /> 
</bean> 

<aop:config> 
    <aop:pointcut id="daoMethods" expression="execution(* mypackage.*Dao.*(..))" /> 
    <aop:advisor advice-ref="requiredTxAdvice" pointcut-ref="daoMethods" /> 
</aop:config> 

<tx:advice id="requiredTxAdvice" transaction-manager="myTransactionManager"> 
    <tx:attributes> 
     <tx:method name="*" propagation="REQUIRED" /> 
    </tx:attributes> 
</tx:advice> 

class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 
<bean id="dummyDao" class="mypackage.DummyDaoImpl"> 
    <property name="sessionFactory" ref="mySessionFactory" /> 
</bean> 

hibernate.propertiesのルックス以下のような:

hibernate.dialect=org.hibernate.dialect.H2Dialect 
hibernate.show_sql=true 
hibernate.format_sql=true 
hibernate.id.new_generator_mappings=true 
hibernate.hbm2ddl.auto=create-drop 

を(作成するには、あまりにも働いていません)

答えて

5

データベースURLをjdbc:h2:mem:と指定すると、H2は接続ごとに新しいデータベースを作成します。したがって、各Hibernateセッションは独自の空データベースを認識します。

異なる接続から同じデータベースにアクセスするには、データベース名を指定する必要があります。また、アクティブな接続がないときにデータベースが閉じないようにする必要があります。結果のURLはjdbc:h2:mem:foo;DB_CLOSE_DELAY=-1のようになります。

また、Springは組込みデータベースの組み込みサポートを提供しています(12.8 Embedded database supportを参照)。

+0

@ user946973:更新されました。 – axtavt

関連する問題