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

В моем проекте 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 ответ

Я сам нашел решение. Я сделал несколько шагов.

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

}

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

Другие вопросы по тегам