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

How update the data from my database in my application java with Hibernate?

我是 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()));
}

尝试在每次完成操作时打开和关闭交易

// 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

首先想到的是:

I undestand that is because the sessionFactory is different.

完全不正确。我最好让您阅读一些 java 应用程序如何与数据库通信的信息。

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

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

估计和Hibernate二级catch有关。你可以阅读它 here。来自本文:

Second level cache is created in session factory scope and is available to be used in all sessions which are created using that particular session factory. It also means that once session factory is closed, all cache associated with it die and cache manager also closed down.

您可以关闭二级接球,但您必须小心,因为它可能会影响您的表现。如何在Hibernate中配置二级catch,可以阅读here.