package pl.edu.icm.saos.persistence.common;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.event.spi.MergeEvent;
import org.hibernate.event.spi.MergeEventListener;
/**
* Hibernate merge listener detecting attempts to merge into session generated entities.
*
* @author madryk
*/
public class GeneratedMergeEventListener implements MergeEventListener {
private static final long serialVersionUID = 1L;
//------------------------ LOGIC --------------------------
@Override
public void onMerge(MergeEvent event) throws HibernateException {
Object originalEntity = event.getOriginal();
if (originalEntity instanceof Generatable && ((Generatable)originalEntity).isGenerated()) {
throw new GeneratedEntityMergeException(originalEntity);
}
}
@Override
public void onMerge(MergeEvent event, @SuppressWarnings("rawtypes") Map copiedAlready) throws HibernateException {
Object originalEntity = event.getOriginal();
if (originalEntity instanceof Generatable && ((Generatable)originalEntity).isGenerated()) {
throw new GeneratedEntityMergeException(originalEntity);
}
}
}