Как сохранить одну и ту же сущность JPA в нескольких базах данных (распределенная система)? - PullRequest
3 голосов
/ 02 июня 2009

(Как) можно сохранить сущность JPA в базах данных нескольких серверов, не копируя все в DTO?

У нас есть распределенная система. Некоторые приложения имеют БД для кеширования. Поставщик JPA выдает исключение, в котором он жалуется, что не может сохранить отсоединенный объект.

Но я бы хотел сохранить идентификатор сущности, просто сохранив его в этой дополнительной БД.

(JPA 1.2, EJB 3.0, Glassfish v2.1, Toplink Essentials)

1 Ответ

3 голосов
/ 02 июня 2009

Не em.persist (obj), просто em.merge (obj). Объединение работает как с прикрепленными, так и с отсоединенными объектами.

Если вы начинаете с отсоединенного объекта, я бы слил объект с соответствующими EntityManager. Если вы пытаетесь сохранить идентичный ключ на всех объектах, я бы вытащил ключ из первого объединенного объекта и использовал его в будущем.

То, что вы, вероятно, (я не знаю) не хотите делать, это попытаться объединить объект, которым управляет один EM, с другим EM. Вы можете проверить это, чтобы увидеть, работает ли оно, я просто не знаю, что произойдет, если вы попробуете.

Зв

YourEntity unattachedEntity = ... // your original entity object.

YourEntity managedEntity = em1.merge(unattachedEntity);

// managedEntity now has the primary key assigned by the DB
unattacheEntity.setPrimaryKey(managedEntity.getPrimaryKey());

em2.merge(unattachedEntity);
em3.merge(unattachedEntity);

Нечто подобное должно работать нормально.

...