我正在使用嵌入式Derby DB和hibernate。我正在将一些实体保存到数据库中。关闭应用程序后,DB中没有实体。为什么会这样呢?
低于我的Hibernate配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
<property name="connection.url">jdbc:derby:\bases\localbase;create=true</property>
<property name="connection.username"></property>
<property name="connection.password"></property>
<property name="hibernate.hbm2ddl.auto">validate</property>
<mapping class="com.example.model.HistoryItem"/>
<mapping class="com.example.model.User"/>
<mapping class="com.example.model.BaseAbstractEntity"/>
</session-factory>
</hibernate-configuration>
答案 0 :(得分:2)
这很奇怪,因为Derby默认情况下会在每次提交后同步到磁盘(除非您设置属性derby.system.durability = test)。你的网址看起来是正确的(虽然我会使用正斜杠)。
这引出了一个问题:你如何管理交易?你确定要提交它们吗?
答案 1 :(得分:1)
Derby喜欢坚持使用数据 - 即将其保存在内存中。如果您尝试通过尝试以下方式关闭它:
DriverManager.getConnection("jdbc:derby:;shutdown=true");
这应该确保将数据刷新到磁盘并且干净地关闭derby。
目前我正试图让Hibernate 3.6为我做这个 - 到目前为止没有运气。
答案 2 :(得分:0)
也许你看错了地方。也许Hibernate应用程序在硬盘上的一个位置创建一个Derby数据库,但是当您稍后查找数据库内容时,您正在查看硬盘上的其他位置。由于您的Derby URL显示“create = true”,如果您没有获得与原始应用程序完全相同的位置规范,Derby将为您静静地创建一个新的空数据库。