Example usage for org.hibernate.event.spi EventType MERGE

List of usage examples for org.hibernate.event.spi EventType MERGE

Introduction

In this page you can find the example usage for org.hibernate.event.spi EventType MERGE.

Prototype

EventType MERGE

To view the source code for org.hibernate.event.spi EventType MERGE.

Click Source Link

Usage

From source file:org.babyfish.hibernate.cfg.Configuration.java

License:Open Source License

@Override
public XSessionFactory buildSessionFactory(ServiceRegistry serviceRegistry) throws HibernateException {
    Arguments.mustBeInstanceOfValue("serviceRegistry",
            Arguments.mustNotBeNull("serviceRegistry", serviceRegistry), StandardServiceRegistryImpl.class);
    replacePersisterClassResolver((AbstractServiceRegistryImpl) serviceRegistry);

    String originalCurrentSessionContext = this.getProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS);
    this.setProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
    SessionFactoryImpl factory;//w w  w . j a v a 2s.co  m
    try {
        pathPlanKeyVlidationSuspended = true;
        try {
            factory = (SessionFactoryImpl) super.buildSessionFactory(serviceRegistry);
        } finally {
            pathPlanKeyVlidationSuspended = false;
        }
    } finally {
        if (originalCurrentSessionContext != null) {
            this.setProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS, originalCurrentSessionContext);
        } else {
            this.getProperties().remove(Environment.CURRENT_SESSION_CONTEXT_CLASS);
        }
    }
    if (originalCurrentSessionContext != null) {
        factory.getProperties().setProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS,
                originalCurrentSessionContext);
    } else {
        factory.getProperties().remove(Environment.CURRENT_SESSION_CONTEXT_CLASS);
    }

    Dialect dialect = factory.getDialect();
    if (dialect instanceof InstallableDialect) {
        ((InstallableDialect) dialect).install(factory);
    }

    EventListenerGroup<MergeEventListener> mergeEventListenerGroup = factory.getServiceRegistry()
            .getService(EventListenerRegistry.class).getEventListenerGroup(EventType.MERGE);
    MergeEventListener mergeEventListener = new ObjectModelMergeEventListener(
            mergeEventListenerGroup.listeners());
    mergeEventListenerGroup.clear();
    mergeEventListenerGroup.appendListener(mergeEventListener);

    setQueryPlanceCache(factory, this.createQueryPlanCache(factory));

    for (ClassMetadata classMetadata : factory.getAllClassMetadata().values()) {
        if (Metadatas.getObjectModelFactoryProvider(classMetadata.getMappedClass()) != null) {
            //Validate whether JPA configuration is same with object model configuration
            HibernateMetadatas.of(classMetadata.getMappedClass()).getPersistentClass(factory);
        }
    }

    return SessionFactoryImplWrapper.wrap(factory);
}

From source file:org.eclipse.emf.cdo.server.internal.hibernate.HibernateStore.java

License:Open Source License

public synchronized SessionFactory getHibernateSessionFactory() {
    if (cdoDataStore == null) {
        if (TRACER.isEnabled()) {
            TRACER.trace("Initializing SessionFactory for HibernateStore"); //$NON-NLS-1$
        }/*from www.j  ava  2s . c o  m*/

        currentHibernateStore.set(this);

        identifierPropertyNameByEntity = new HashMap<String, String>();

        try {
            initDataStore();

            // this has to be done before the classmapping is iterated
            // otherwise it is not initialized
            SessionFactory hibernateSessionFactory = cdoDataStore.getSessionFactory();
            ServiceRegistry serviceRegistry = ((SessionFactoryImpl) hibernateSessionFactory)
                    .getServiceRegistry();
            final EventListenerRegistry eventListenerRegistry = serviceRegistry
                    .getService(EventListenerRegistry.class);
            eventListenerRegistry.setListeners(EventType.MERGE, new CDOMergeEventListener());

            final Iterator<?> iterator = cdoDataStore.getConfiguration().getClassMappings();
            while (iterator.hasNext()) {
                final PersistentClass pc = (PersistentClass) iterator.next();
                if (pc.getIdentifierProperty() == null) {
                    // happens for featuremaps for now...
                    continue;
                }

                identifierPropertyNameByEntity.put(pc.getEntityName(), pc.getIdentifierProperty().getName());
            }
        } catch (Throwable t) {
            t.printStackTrace(System.err);
            if (TRACER.isEnabled()) {
                TRACER.trace(t);
            }
            throw new RuntimeException(t);
        } finally {
            currentHibernateStore.set(null);
        }
    }

    return cdoDataStore.getSessionFactory();
}

From source file:org.granite.test.tide.hibernate4.data.TestHibernate4JPAChangeSetMerge.java

License:Open Source License

@Override
protected void initPersistence() {
    Map<String, String> props = new HashMap<String, String>();
    props.put("hibernate.dialect", org.hibernate.dialect.H2Dialect.class.getName());
    props.put("hibernate.hbm2ddl.auto", "create-drop");
    props.put("hibernate.show_sql", "true");
    props.put("hibernate.connection.driver_class", org.h2.Driver.class.getName());
    props.put("hibernate.connection.url", "jdbc:h2:mem:test-changesetmerge");
    props.put("hibernate.connection.username", "sa");
    props.put("hibernate.connection.password", "");

    entityManagerFactory = Persistence.createEntityManagerFactory("hibernate4-changesetmerge-pu", props);

    try {/* w w  w .j  a v a  2s. co m*/
        SessionFactoryImpl sessionFactory = (SessionFactoryImpl) entityManagerFactory.getClass()
                .getMethod("getSessionFactory").invoke(entityManagerFactory);
        EventListenerRegistry registry = sessionFactory.getServiceRegistry()
                .getService(EventListenerRegistry.class);
        registry.setListeners(EventType.MERGE, new HibernateDataChangeMergeListener());
    } catch (Exception e) {
        throw new RuntimeException("Could not init persistence", e);
    }
}

From source file:org.granite.tide.hibernate4.Hibernate4ChangeSetIntegrator.java

License:Open Source License

public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory,
        SessionFactoryServiceRegistry serviceRegistry) {
    final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);

    try {//from   ww  w . j a v a  2 s  . c  o m
        HibernateDataChangePublishListener listener = new HibernateDataChangePublishListener();
        eventListenerRegistry.getEventListenerGroup(EventType.POST_INSERT).appendListener(listener);
        eventListenerRegistry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(listener);
        eventListenerRegistry.getEventListenerGroup(EventType.POST_DELETE).appendListener(listener);
        eventListenerRegistry.getEventListenerGroup(EventType.PRE_COLLECTION_UPDATE).appendListener(listener);

        eventListenerRegistry.getEventListenerGroup(EventType.PERSIST)
                .addDuplicationStrategy(new OverrideWrapStrategy<PersistEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.PERSIST)
                .appendListener(new HibernatePersistListener());
        eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH)
                .addDuplicationStrategy(new OverrideWrapStrategy<PersistEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.PERSIST_ONFLUSH)
                .appendListener(new HibernatePersistOnFlushListener());
        eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE)
                .addDuplicationStrategy(new OverrideWrapStrategy<SaveOrUpdateEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.SAVE_UPDATE)
                .appendListener(new HibernateSaveOrUpdateListener());
        eventListenerRegistry.getEventListenerGroup(EventType.MERGE)
                .addDuplicationStrategy(new OverrideWrapStrategy<MergeEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.MERGE)
                .appendListener(new HibernateDataChangeMergeListener());
        eventListenerRegistry.getEventListenerGroup(EventType.DELETE)
                .addDuplicationStrategy(new OverrideWrapStrategy<DeleteEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.DELETE)
                .appendListener(new HibernateDeleteListener());
        eventListenerRegistry.getEventListenerGroup(EventType.LOCK)
                .addDuplicationStrategy(new OverrideWrapStrategy<LockEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.LOCK).appendListener(new HibernateLockListener());
        eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH)
                .addDuplicationStrategy(new OverrideWrapStrategy<AutoFlushEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.AUTO_FLUSH)
                .appendListener(new HibernateAutoFlushListener());
        eventListenerRegistry.getEventListenerGroup(EventType.FLUSH)
                .addDuplicationStrategy(new OverrideWrapStrategy<FlushEventListener>());
        eventListenerRegistry.getEventListenerGroup(EventType.FLUSH)
                .appendListener(new HibernateFlushListener());
    } catch (Exception e) {
        throw new RuntimeException("Could not setup Hibernate 4 listeners", e);
    }
}