2015-10-21 23 views
1

我是使用Hibernate的新手。而我的問題是:我正在開發一個桌面應用程序。此應用程序用於不同的計算機。 當計算機向我的數據庫中添加新用戶時,另一臺計算機在他未關閉並再次打開該應用程序之前不能看到新用戶。如何使用Hibernate更新我的應用程序java中的數據庫中的數據?

我不確定這是因爲sessionFactory是不同的。

我使用Hibernate來讀取用戶。

session = Settings.sessionFactory.openSession(); 

String selectSql = "select c.idClient, c.name FROM Clients c WHERE c.active=1 ORDER BY c.name"; 

Query query = session.createQuery(selectSql); 
List<Object[]> listUsers = query.list(); 

for (Object[] data : listUsers) 
{ 
    cmbClient.addItem(new ItemCombobox(data[0].toString(), data[1].toString())); 
} 
+0

您的桌面應用程序是否在內部使用Hibernate,或者您的服務器中是否安裝了Hibernate?你是否定期重新運行查詢?你使用查詢緩存嗎? –

回答

1

試開每次都用一個操作完成時間

// Non-managed environment idiom Session sess = factory.openSession(); Transaction tx = null; try { 
    tx = sess.beginTransaction(); 

    // do some work 
    ... 

    tx.commit(); } catch (RuntimeException e) { 
    if (tx != null) tx.rollback(); 
    throw e; // or display error message } finally { 
    sess.close(); } 

見關閉交易:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html

0

首先在thougt的:

我已瞭解該是因爲sessionFactory不同。

完全不正確。我更願意閱讀一些關於java應用程序如何與數據庫通信的信息。

如果你讓你的查詢從數據庫中獲取數據並將你的本地副本存儲在jvm(Java虛擬機)內存中。所以,如果你想從數據庫中獲得新的數據副本,你只需再次對數據庫進行查詢(在第二臺計算機上添加用戶操作完成後),而不是重置應用程序。

編輯: 注意:SessionFactory僅在整個應用程序中使用一次。

0

它可能與Hibernate的二級捕獲有關。你可以閱讀它here。從這樣的文字:

二級緩存在會話工廠範圍內創建並 提供其使用的是 特定會話工廠創建的所有會話使用。這也意味着一旦會話工廠關閉,所有與其關聯的高速緩存並且高速緩存管理器也關閉了 。

您可以關閉二級捕獲,但必須小心,因爲它可能會影響您的性能。如何在Hibernate中配置第二級catch,你可以閱讀here

+0

它不得不對二級緩存做任何事情,你必須啓用第二級緩存 –

+0

@karim你知道在這個選項已經啓用的人之後他沒有參與項目嗎? – Szarpul

相關問題