1

在我的 rapidclipse 4.0 项目中,我必须从数据库视图中读取数据,同时保存手动输入的数据。然后应将读取的值包含在要保存的数据中。

我的问题是,这很好用,只有一次/第一次保存。如果我第二次保存,该值不会更新。

在保存按钮单击事件中,我放置了以下代码:

private void cmdSave_buttonClick(final Button.ClickEvent event) {
    try {
        this.txtDmvTable.setValue("T_supplier");

        final int i = 1;
        VSuppliersNewId vsni = new VSuppliersNewId();
        vsni = new VSuppliersNewIdDAO().find(i);

        this.txtDmvCol00.setValue(vsni.getNewSupId().toString());

        this.fieldGroup.save();
    }
    catch(final Exception e) {
        e.printStackTrace();
        Notification.show("Do isch was falsch",
                e.getMessage(),
                Notification.Type.ERROR_MESSAGE);
    }
}

以下几行完全符合预期,但只有一次:

final int i = 1;
VSuppliersNewId vsni = new VSuppliersNewId();
vsni = new VSuppliersNewIdDAO().find(i);

this.txtDmvCol00.setValue(vsni.getNewSupId().toString());

该视图VSuppliersNewId将始终只返回一个最新值。
例如:

  • 我的观点是从表字段中返回最高值。
  • 让我们假设在第一轮它会返回数字237
  • 保存我的数据后,视图可能会返回238
  • 如果我通过数据库中的 sql 直接读取此内容,我会返回238
  • 但通过上面的代码,它仍然存在237

我假设,必须刷新/重新加载来自数据库的整个代码链,但事实并非如此。

如何更改/增强我的代码以获得预期结果?我做错了什么?

4

1 回答 1

0

我自己找到了解决方案 我做了几个步骤。

1) 打开我的实体并设置 cacheable = false
2) 打开 persistence.xml 并设置以下参数:

<property name="hibernate.cache.use_query_cache" value="false" />
<property name="xdev.queryCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.cache.use_second_level_cache" value="false" />

我使用以下代码来完成表刷新:

 private void cmdSave_buttonClick(final Button.ClickEvent event) {
     try
     {
        this.txtDmvTable.setValue("T_supplier");

        final int i = 1;            
PersistenceUtils.getEntityManager(manOKMContacts.class).unwrap(SessionFactory.class);

        VSuppliersNewId vsni = new VSuppliersNewId();
        vsni = new VSuppliersNewIdDAO().find(i);

        this.txtDmvCol00.clear();
        this.txtDmvCol00.setValue(vsni.getNewSupId().toString());

        this.fieldGroup.save();

        this.table.getBeanContainerDataSource().removeAll();
        this.table.getBeanContainerDataSource().addAll(new OkmDbMetadataValueDAO().findAllContacts());
        this.table.getBeanContainerDataSource().refresh();

        this.table.setSortContainerPropertyId("DmvCol00");
        this.table.sort();

                     }
     catch(final Exception e)
     {
      Notification.show("Do isch was falsch", e.getMessage(), Notification.Type.ERROR_MESSAGE);
     }

}

希望这对其他人有帮助

于 2019-05-09T11:51:40.610 回答