2009-06-02 8 views
3

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

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

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

(JPA 1.2, EJB 3.0, Glassfish v2.1, TOPLINK Основы)

ответ

3

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

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

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

So.

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); 

Что-то вроде этого должно работать нормально.

+0

Большое вам спасибо! Это действительно просто сработало! Ваш ответ был невероятно полезен! Я попытался объединиться раньше - но не с твоим волшебным трюком, используя два объекта. – SAL9000