2015-03-21 1 views
0

Я работаю над приложением, которое управляет двумя таблицами в базе данных с JPA. Первый содержит «Пользователи», а второй - «Элементы»; у одного пользователя может быть много элементов, но элемент соответствует только одному пользователю. Это означает, что theres - отношение One to Many от пользователей к элементам и отношение много к одному от элементов к пользователям.EntityManager merge() в JPA

Мое приложение - служба RESTful, и в настоящее время я переношу DTO через Интернет в веб-приложение, где отображаются данные сущностей. Когда я конвертирую информацию из объекта User в DTO пользователя, я не могу отправить все его элементы, поскольку их может быть слишком много, поэтому я беру сущность из базы данных Users и конвертирую ее в DTO без элементов.

Мой вопрос: если я хочу обновить информацию пользователя, когда я конвертирую DTO обратно в объект, у него не будет никаких элементов, поэтому, как я могу сохранить изменения, сохраняющие внешние ключи, которые представляют элементы User перед обновлением его информации?

Я знаю, что EntityManager использует метод merge() для обновления информации в базе данных, но не повлияет ли это на внешние ключи, которые я хочу сохранить? потому что я пытаюсь сохранить сущность без элементов?

ответ

1

Вам нужно просто получить объект пользователя из EM, обновление полей, которые изменились (или все) совершать сделки (если вы управляете сделки mannualy)

DTO modification = ... 
em.getTransaction().begin(); //if it is not container managed 
User user = em.find(User.class,modification.getId()); 
user.setName(modification.getName()); 
user.setXXX... 
em.getTransaction().commit()l //if it is not managed 

Как правило, элементы будут лениться загрузка, поэтому они вообще не будут восстановлены. Даже если объект User, извлеченный из JPA, будет иметь полную информацию о них, если вы не изменяете его содержимое itmes, элементы остаются неизменными.