Воссоздание сущности с использованием открытого JPA - PullRequest
0 голосов
/ 10 августа 2011

Я сталкиваюсь с довольно простой проблемой (якобы ..). Это структура, к которой я обращаюсь:

Structure

Я работаю с flex на стороне клиента, с Java и открытым JPA на стороне сервера и над уровнем устойчивости Microsoft SQL Server.

В моем приложении (на стороне клиента) можно решить, является ли клиент

  1. участник
  2. рекомендуется
  3. не рекомендуется.

Предположим, у меня есть «Джо» в качестве рекомендованного клиента, и теперь я конвертирую Джо в «не рекомендованный» (это делается со стороны клиента, просто не проверяя чек nox).

В бэкэнде я удаляю текущую сущность Джо (как рекомендованного клиента), устанавливаю для его идентификатора значение null и снова создаю его как «нерекомендованный клиент». Примерно так:

getAdviseeDao().delete(currentPersistedAdvisee);
currentAdvisee.setId(null);
getAdviseeDao().create(currentAdvisee);

Я продолжаю получать

com.microsoft.sqlserver.jdbc.SQLServerException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_advised_to_clients". The conflict occurred in database "blablabla", table "dbo.participants", column 'id'.

Есть идеи, почему это может произойти?

1 Ответ

0 голосов
/ 10 августа 2011
getAdviseeDao().delete(currentPersistedAdvisee);
currentAdvisee.setId(null);
getAdviseeDao().create(currentAdvisee);

JPA просто так не работает. Не устанавливайте идентификаторы в null и не пытайтесь повторно сохранить сущность как что-то еще. Вы получите странное и неожиданное поведение.

Я думаю, что вы должны использовать Агрегацию вместо Наследования. Думаю, я бы включил рекомендованную часть в класс Embeddable.

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