2010-08-15 67 views
2

我正在使用帶有休眠功能的嵌入式Derby數據庫。我正在將一些實體保存到數據庫中。關閉應用程序後,DB中沒有實體。爲什麼會這樣?Derby數據庫在應用程序運行後不保存實體

下面我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

你如何寫入數據庫?你在犯嗎? – Mark 2010-08-15 09:04:55

回答

2

這是奇怪,因爲德比同步到磁盤中去後,默認情況下,提交(除非你設置屬性derby.system.durability =測試)。你的網址看起來是正確的(儘管我會使用正斜槓)。

這引發了一個問題:您如何管理交易?你確定你正在提交嗎?

+0

我沒有使用傳輸。我現在就試一試。 java代碼添加對象,例如: public final static SessionFactory sf = HibernateUtil.getSessionFactory(); public long addObject(T object)throws DAOException Session s = sf.openSession(); s.save(object); s.close(); return object.getId(); } – Ramil 2010-08-16 06:34:41

+0

謝謝。交易有幫助。 – Ramil 2010-08-16 06:52:34

0

也許你正在尋找錯誤的地方。也許Hibernate應用程序在你的硬盤上的一個位置上創建了一個Derby數據庫,但是當你以後查找數據庫內容時,你正在硬盤上的另一個位置上查找。由於您的Derby網址顯示「create = true」,因此如果您的原始應用中的位置規格不完全相同,那麼Derby會悄悄地爲您創建一個新的空數據庫。

+0

不,我正在使用正確的數據庫。 – Ramil 2010-08-16 06:19:05

1

德比喜歡掛在數據上 - 即保存在內存中。如果你試圖關閉它通過嘗試喜歡的東西:

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

這應該確保數據被刷新到磁盤和德比完全關閉。

目前我正試圖讓Hibernate 3.6爲我做到這一點 - 迄今爲止沒有運氣。

相關問題