База данных Derby не сохраняет сущность после запуска приложения - PullRequest
2 голосов
/ 15 августа 2010

Я использую Embedded Derby 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 ]

2 голосов
/ 15 августа 2010

Это странно, потому что Derby синхронизируется с диском после каждой фиксации по умолчанию (если вы не установили свойство derby.system.durability = test).И ваш URL выглядит правильно (хотя я бы использовал косую черту).

Возникает вопрос: как вы управляете транзакциями?Вы уверены, что совершаете их?

1 голос
/ 08 мая 2012

Дерби любит держаться за данные - т.е. хранить их в памяти.Если вы попытаетесь выключить его, попробовав что-то вроде:

DriverManager.getConnection("jdbc:derby:;shutdown=true");

Это должно гарантировать, что данные будут сброшены на диск, а дерби завершит свою работу чисто.чтобы получить Hibernate 3.6, чтобы сделать это для меня - пока не повезло.

0 голосов
/ 15 августа 2010

Возможно, вы ищете не в том месте. Возможно, приложение Hibernate создает базу данных Derby в одном месте на вашем жестком диске, но когда вы будете искать содержимое базы данных позже, вы будете искать в другом месте на вашем жестком диске. Поскольку в URL-адресе Derby указано «create = true», Derby тихо создаст для вас новую пустую базу данных, если вы не получите точно такую ​​же спецификацию местоположения, как в исходном приложении.

...