3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.persistence
.hibernate
;
14 import org
.hibernate
.Hibernate
;
15 import org
.hibernate
.HibernateException
;
16 import org
.hibernate
.event
.spi
.MergeEvent
;
17 import org
.hibernate
.event
.spi
.MergeEventListener
;
19 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
26 public class PostMergeEntityListener
implements MergeEventListener
{
31 * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent)
34 public void onMerge(MergeEvent event
) throws HibernateException
{
39 * @see org.hibernate.event.spi.MergeEventListener#onMerge(org.hibernate.event.spi.MergeEvent, java.util.Map)
42 public void onMerge(MergeEvent event
, Map copiedAlready
) throws HibernateException
{
43 // at this point the original entity to merge has already been copied to the result
44 // => the result is an exact copy of the original EXCEPT or the the id which is set by hibernate
45 // the following code sets the id in the original entity so that it can be used as a return value
46 // for the CdmEntityDaoBase.merge(T transientObject, boolean returnTransientEntity) call
47 if(event
.getOriginal() != null && CdmBase
.class.isAssignableFrom(event
.getOriginal().getClass()) &&
48 event
.getResult() != null && CdmBase
.class.isAssignableFrom(event
.getResult().getClass())) {
49 CdmBase original
= (CdmBase
) event
.getOriginal();
50 CdmBase result
= (CdmBase
) event
.getResult();
51 if(original
!= null && Hibernate
.isInitialized(original
) && original
.getId() == 0 &&
52 result
!= null && Hibernate
.isInitialized(result
)) {
53 original
.setId(result
.getId());