spring – 未创建内存数据库,但日志显示已执行DDL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了spring – 未创建内存数据库,但日志显示已执行DDL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3854字,纯文字阅读大概需要6分钟。
内容图文
我正在尝试设置spring环境以在内存数据库中运行,该数据库是根据提供的映射自动创建的.在执行期间,我可以在日志中看到执行DDL语句,但是当hibernate尝试将数据插入到创建的表中时,我得到“Table not found”异常.
有什么问题?
使用spring 3.1.1和Hibernate 4.1.1和H2版本1.3.165.
日志看起来像(只剩下令人印象深刻的记录):
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.jdbc.datasource.SimpleDriverDataSource@a86d12] 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
(创建也不起作用)
解决方法:
当您将数据库URL指定为jdbc时:h2:mem:H2为每个连接创建新数据库,因此每个Hibernate会话都会看到自己的空数据库.
因此,您需要指定数据库名称,以从不同的连接访问同一数据库.此外,您还需要防止数据库在没有活动连接时关闭.生成的URL如下所示:jdbc:h2:mem:foo; DB_CLOSE_DELAY = -1.
另请注意,Spring提供了对嵌入式数据库的内置支持,请参阅12.8 Embedded database support.
内容总结
以上是互联网集市为您收集整理的spring – 未创建内存数据库,但日志显示已执行DDL全部内容,希望文章能够帮你解决spring – 未创建内存数据库,但日志显示已执行DDL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。