如何使用Hibernate在我的应用程序java中更新数据库中的数据?

时间:2015-10-21 11:22:46

标签: java hibernate session sessionfactory

我是使用Hibernate的新手。我的问题是:我正在开发一个桌面应用程序。此应用程序用于不同的计算机。 当计算机将新用户添加到我的数据库时,另一台计算机无法看到新用户,直到他没有关闭并再次打开该应用程序。

我认为这是因为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()));
}

3 个答案:

答案 0 :(得分:1)

每次完成操作时尝试打开和关闭事务

V_A*V_A'

请参阅:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/transactions.html

答案 1 :(得分:0)

首先是thougt:

  

我认为这是因为sessionFactory不同。

完全不正确。我更好地向您介绍了Java应用程序如何与数据库通信的一些信息。

如果进行查询,则从数据库中获取数据并将本地副本保存在jvm(Java虚拟机)内存中。因此,如果您想从数据库获取新的数据副本,您只需再次对数据库进行查询(在第二台计算机上添加用户操作完成后),而不是重置您的应用程序。

编辑: 注意:SessionFactory仅在整个应用程序中使用一次。

答案 2 :(得分:0)

它可能与Hibernate二级捕获有关。你可以阅读它here。从这段文字:

  

在会话工厂范围内创建二级缓存   可用于使用该会话创建的所有会话   特别会议工厂。它也意味着一旦会议工厂   关闭,与其关联的所有缓存都死亡,缓存管理器也关闭   下来。

您可以关闭二级捕获,但必须小心,因为它可能会影响您的性能。如何在Hibernate中配置二级catch,你可以阅读here