应用程序运行后,Derby数据库不保存实体

时间:2010-08-15 08:20:34

标签: java hibernate orm derby

我正在使用嵌入式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>   

3 个答案:

答案 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将为您静静地创建一个新的空数据库。