2015-10-21 14 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

相关问题