我正在使用H2作为我正在编写的应用程序的开发数据库。该应用程序与Jetty一起部署,并通过Hibernate处理连接。为了构造表,我使用连接URL中的INIT参数来运行语句。
问题是,似乎此连接经常重置,重新运行该脚本(从而删除自上次启动以来存储在数据库中的所有内容)。这似乎几乎在启动后立即发生。
在我的脚本结束时,我添加了以下内容,允许我确认在初始启动应用程序后运行此脚本:
DROP TABLE IF EXISTS system_msg;
CREATE TABLE system_msg (
id int AUTO_INCREMENT NOT NULL,
msg_date timestamp NULL,
msg text NULL,
PRIMARY KEY(id)
);
INSERT INTO system_msg(msg_date, msg)
VALUES (NOW(), 'Database schema created from DDL script');
在应用程序启动时,我使用Hibernate使用一些核心数据填充应用程序。网页菜单结构是启动时生成的实体之一,通常我只能加载一次页面。第二次加载页面时,我得到这样的结果:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.example.web.model.front.Menu#1]
这表示在数据库anympore中找不到缓存的实体。如果我使用Web控制台查看H2数据库,我确实可以看到init脚本已经再次运行(查看system_msg表中帖子的时间戳)
我正在使用Ehcache以及二级缓存,但我不确定这是否与问题相关。如果是,则这是当前配置文件:http://pastebin.com/nGG3eENf
我使用Maven(嵌入式)在Eclipse(Indigo)中进行开发。我一开始认为,每当我进行代码更改时,它会重置H2数据库服务器,触发Jetty实例的幕后重置,但它也会在不触及代码的情况下发生。
其他规格:
是否有任何我错过的设置,或者为什么我的H2数据库不断重置的任何其他可能的解释?