Таблица не будет обновляться иногда через собственный запрос Hibernate - PullRequest
2 голосов
/ 15 июня 2011

У меня есть объект, назовем его X. (у объекта есть идентификатор @Id). Сущность сопоставлена ​​с таблицей, назовем ее: X_TABLE. Он также содержит

@ManyToOne
@JoinColumn(name = "JOIN_COLUMN")
YClass joinColumn;//another entity

Я работаю со следующим кодом:

X x = new X(xDTO);//just a copy constructor, nothing fancy, without id
x.joinColumn = null;
entityManager.persit(x);
entityManager.flush();
join_column_id = somne_function();//irelevant
Query q = entityManager.createNativeQuery(
        "UPDATE  X_TABLE t SET t.JOIN_COLUMN=" + join_column_id + " WHERE " + " t.id= "    + x.getId());
q.executeUpdate();
q.flush();

Смысл в этом, если кому-то интересно, заключается в том, что join_column является внешним ключом для другой таблицы в другой базе данных, и я задаю его с помощью собственного запроса, потому что таблица соответствия не существует в та же база данных, содержащая X_TABLE. Но это не проблема. Отображения enitity и отношения все в порядке, я могу гарантировать это.

Приведенный выше код выполняется для нескольких записей в цикле, и иногда он работает нормально (прекрасно сохраняет и обновляет таблицу) для всех записей. Но иногда он отлично работает для всех записей, кроме последней в цикле (в том смысле, что он сохраняет запись, , но не выполняет обновление в базе данных). Нет исключений , а журнал отладки сервера JBoss для гибернации показывает, что ОБНОВЛЕНИЕ происходит с правильными значениями, без ошибок. Тем не менее, таблица содержит пустое значение в JOIN_COLUMN только для одной записи, и я понятия не имею, почему. Есть мысли?

PS: услуга является транзакцией, управляемой контейнером.

1 Ответ

0 голосов
/ 15 июня 2011

Несколько предложений:

  • Проверьте количество строк, на которые влияет executeUpdate ()
  • Какова ваша политика транзакций?Определен ли TransactionManager?
...