Почему данные в таблице обновляются до нуля из-за следующего кода Java? - PullRequest
0 голосов
/ 10 ноября 2018

Следующий метод должен обновить строку в таблице путем обновления объекта.

public void saveOrUpdate(final T data) throws CPDPersistenceException {
   final EntityManager em = getEntityManager();
   try {
      final EntityTransaction transaction = em.getTransaction();
      transaction.begin();
      em.merge(data);
      transaction.commit();
   }
} catch (final PersistenceException e) {
   throw new CPDPersistenceException(e);
}

В обновленном объекте «data», переданном saveorUpdate (), содержатся новые данные. После транзакции, хотя () данные обновляются в таблице, но есть один элемент объекта - идентификатор - который все еще в порядке в таблице, которую я обновляю, но в другой таблице он был изменен на ноль. Кто-нибудь знает, как это может произойти? Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Если вы не хотите, чтобы какая-либо другая таблица обновлялась этим слиянием, вам нужно использовать только необходимый вам "Каскад", но не Cascade.MERGE для этого отношения в вашем классе данных. Проверьте эту ссылку для получения дополнительной информации о том, как каскадирование работает с JPA и Hibernate. https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/

Если вы все еще не хотите, чтобы этот столбец обновлялся до нуля (я полагаю, что это внешний ключ), то вам нужно убедиться, что дочерние данные также присутствуют в элементе данных при вызове этого метода.

0 голосов
/ 10 ноября 2018

Добавьте updatable = false в @joincolumn вашего ребенка. Поэтому он не будет обновлять вашего ребенка при обновлении родительской таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...