Merge branch 'develop' into ticket-5066
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / hibernate / PostMergeEntityListener.java
1 // $Id$
2 /**
3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.cdm.persistence.hibernate;
11
12 import java.util.Map;
13
14 import org.hibernate.Hibernate;
15 import org.hibernate.HibernateException;
16 import org.hibernate.event.spi.MergeEvent;
17 import org.hibernate.event.spi.MergeEventListener;
18
19 import eu.etaxonomy.cdm.model.common.CdmBase;
20
21 /**
22 * @author cmathew
23 * @date 23 Sep 2015
24 *
25 */
26 public class PostMergeEntityListener implements MergeEventListener {
27
28 private static final long serialVersionUID = 1565797119368313987L;
29
30 @Override
31 public void onMerge(MergeEvent event) throws HibernateException {
32
33 }
34
35 @Override
36 public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException {
37 // at this point the original entity to merge has already been copied to the result
38 // => the result is an exact copy of the original EXCEPT or the the id which is set by hibernate
39 // the following code sets the id in the original entity so that it can be used as a return value
40 // for the CdmEntityDaoBase.merge(T transientObject, boolean returnTransientEntity) call
41 if(event.getOriginal() != null && CdmBase.class.isAssignableFrom(event.getOriginal().getClass()) &&
42 event.getResult() != null && CdmBase.class.isAssignableFrom(event.getResult().getClass())) {
43 CdmBase original = (CdmBase) event.getOriginal();
44 CdmBase result = (CdmBase) event.getResult();
45 if(original != null && Hibernate.isInitialized(original) && original.getId() == 0 &&
46 result != null && Hibernate.isInitialized(result)) {
47 original.setId(result.getId());
48
49 }
50 }
51 }
52
53 }