Datanucleus JPA Операция обновления и удаления - PullRequest
2 голосов
/ 10 мая 2011

Я использую Datanucleus в качестве движка JPA для выполнения CRUD для объекта в базе данных Force.com.Вставка и Выбор работают нормально, но при обновлении создается новая строка, а удаление не удаляет запись вообще.Я использую следующее для обеспечения выполнения транзакций

Существует ли какая-то проблема с прокси-объектом для фактической синхронизации объекта после того, как объект был выбран, изменен и затем обновлен.

Кажется, что, поскольку слой ORM (datanucleus + force sdk) не может совпасть между измененным объектом и исходным, он приземляется, создавая новую строку.1009 *

Спасибо

1 Ответ

0 голосов
/ 18 мая 2011

Будет полезно, если вы сможете опубликовать свой код.Но я предполагаю, что вы можете столкнуться с известной разницей в поведении между DataNucleus и другими ORM, такими как Hibernate.

Вы делаете что-то вроде этого?выполняется механизмом привязки данных, таким как Spring MVC).Если вы сделаете это следующим образом, не будет работать с DataNucleus, но будет работать с Hibernate.Для DataNucleus вы должны вместо этого сделать:

MyEntity ent = entityManager.find(MyEntity.class, idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);

Я бы предпочел, чтобы он работал как Hibernate, но команда DataNucleus считает, что это правильное поведение.Может быть, они могут вмешаться. Я полагаю, что это вопрос, когда вы рассматриваете сущность как новую сущность против отдельной сущности.Если экземпляр вашей сущности отсоединен, то при вызове слияния он должен быть присоединен повторно, и ваша строка базы данных будет обновлена ​​при фиксации / сбросе транзакции.Если это новый экземпляр, то менеджер сущностей всегда будет создавать новую запись.

Что касается вашей проблемы удаления, я не знаю, что это может быть.Возможно, вы можете опубликовать пример кода?Вы можете найти полный пример приложения CRUD с помощью провайдера JPA здесь:

https://github.com/forcedotcom/javasample-musiclib

...