Как перезагрузить контент из базы данных просмотра / обновления сущности? - PullRequest
1 голос
/ 03 мая 2019

В моем проекте 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 голосов
/ 09 мая 2019

Я нашел решение сам Есть несколько шагов, которые я сделал.

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);
     }

}

Надеюсь, что это поможет другим

...