1
我想知道如果我用OpenJpa 2保存實體的方式是正確的。OpenJpa合併分離對象
我收到我反序列化休息服務對象,然後保存該實例:
- 開始事務
- 從數據庫檢索實例(即使我已經有了這個實例)
- 複製從分離實例從DB
- 呼叫合併
- 檢索到的實例屬性提交事務
如果複雜的實體模型與compsitions,它變得痛苦!
public boolean save(Collection<Event> events) throws DataException {
if (events == null) {
throw new DataException("Cannot save null events");
}
EntityManager em = getEntityManager();
try {
em.getTransaction().begin();
for (Event event : events) {
boolean add = true;
if(event.getKey() > 0){
Event previousEvent = em.find(Event.class, event.getKey());
if (previousEvent != null) {
//update
previousEvent.setTitle(event.getTitle());
previousEvent.setDate(event.getDate());
previousEvent.setDescription(event.getDescription());
List<Member> participants = new ArrayList<>();
for(Member m : event.getParticipants()){
Member participant = em.find(Member.class, m.getKey());
if(participant != null){
participants.add(participant);
}
}
previousEvent.setParticipants(participants);
List<Member> registrants = new ArrayList<>();
for(Member m : event.getRegistrants()){
Member registrant = em.find(Member.class, m.getKey());
if(registrant != null){
participants.add(registrant);
}
}
previousEvent.setRegistrants(registrants);
em.merge(previousEvent);
add = false;
}
}
if(add) {
//add
em.persist(event);
}
}
em.getTransaction().commit();
} catch (PersistenceException pe) {
pe.printStackTrace();
throw new DataException("An error occured while saving the event", pe);
} finally {
em.close();
}
return true;
}
有什麼建議嗎?
感謝
爲什麼不使用合併而不是從數據庫中查找實體?合併應該查找實體並將屬性複製到它中。 – Chris