Как перезагрузить контент из базы данных просмотра / обновления сущности?
В моем проекте 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);
}
}
Надеюсь, что это поможет другим