Как скопировать ссылки в Hibernate? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть два класса «Метод» и «BackendMethod», которые находятся в отношениях «один ко многим».Я использовал mappedBy-аннотацию для набора «методов» в BackentMethod.java.

Я сделал копию экземпляра methodOriginal с именем methodCopy и сохранил ее.Теперь я хочу, чтобы все методы BackendMethods, на которые ссылается methodOriginal, ссылались также на methodCopy.

Я не хочу их копировать, просто снова назначьте их новому методу.

Когда я просто назначаю их им так:

methodCopy.setBackendMethoden(methodOriginal.getBackendMethoden()));

, я получаю HibernateException:

HibernateException: найдены общие ссылки на коллекцию: Method.backendMethoden

Когда я копирую весь набор следующим образом:

methodCopy.setBackendMethoden(new HashSet<Backend>(methodOriginal.getBackendMethoden())));
methodCopy.persist();

, после этого набор будет нулевым.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Я не хочу их копировать, просто назначьте их новому «Методу» снова.

Это не сработает, потому что вы определили отношение между методом и backendMethod как oneToMany. На одну сущность BackendMethod может ссылаться только одна сущность Method (оригинал). Если вам нужен тот же набор backendMethods для MethodCopy, то вам нужен набор новых объектов backendMethod. В этом случае эти сущности бэкэнд-метода дублируются в вашей базе данных (разумеется, с разными PK).

Или вы можете изменить отношение ко многим.

0 голосов
/ 07 марта 2012

Когда вы копируете ссылку в спящем режиме, всегда помните, что установите значения идентификатора и значения отношения равными нулю. Вот что я обычно делаю,

Итак, вам нужно перебрать methodOriginal.getBackendMethoden(), установить ссылку и ids на null, а затем установить на methodCopy.

Также убедитесь, что значение methodCopy s и id равно null.

Тогда это будет рассматриваться как новые объекты и будет сохранено.

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