如何从数据库视图/刷新实体重新加载内容?

时间:2019-05-03 15:09:57

标签: java vaadin rapidclipse

在我的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

我认为,数据库中的整个代码链都必须刷新/重新加载,但不是。

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

1 个答案:

答案 0 :(得分: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);
     }

}

希望这对其他人有帮助