Example usage for org.hibernate.persister.entity EntityPersister getClassMetadata

List of usage examples for org.hibernate.persister.entity EntityPersister getClassMetadata

Introduction

In this page you can find the example usage for org.hibernate.persister.entity EntityPersister getClassMetadata.

Prototype

ClassMetadata getClassMetadata();

Source Link

Document

Get the user-visible metadata for the class (optional operation)

Usage

From source file:com.autobizlogic.abl.data.hibernate.HibPersistentBeanCopy.java

License:Open Source License

/**
 * Create from a state array./*  ww w  . j  a v  a  2s .c o  m*/
 * @param The state (typically from a Hibernate event)
 * @param pk The primary key
 * @param persister The persister for the object
 */
@SuppressWarnings("unchecked")
protected HibPersistentBeanCopy(Object[] state, Object entity, Serializable pk, EntityPersister persister,
        Session session) {
    if (entity instanceof Map)
        map = (Map<String, Object>) entity;
    else {
        bean = entity;
        beanMap = new BeanMap(entity);
    }
    this.pk = pk;
    this.metaEntity = MetaModelFactory.getHibernateMetaModel(persister.getFactory())
            .getMetaEntity(persister.getEntityName());

    ClassMetadata metadata = persister.getClassMetadata();
    String[] propNames = metadata.getPropertyNames();
    for (int i = 0; i < propNames.length; i++) {
        String propName = propNames[i];
        if (metaEntity.getMetaProperty(propName).isCollection())
            continue;

        MetaRole metaRole = metaEntity.getMetaRole(propName);
        if (metaRole == null) { // Not a relationship -- must be an attribute
            if (state[i] != null)
                values.put(propName, state[i]);
        } else if (!metaRole.isCollection()) {
            // In the case of old values, when we are handed the state, it contains the pk for associations,
            // and not (as you'd expect) the object itself. So we check whether the value is a real object,
            // and if it's not, we grab it from the object.
            if (state[i] == null || session.contains(state[i])) {
                values.put(propName, state[i]);
            } else {
                // We have a pk instead of a proxy -- ask Hibernate to create a proxy for it.
                String className = metadata.getPropertyType(propName).getReturnedClass().getName();
                PersistenceContext persContext = HibernateSessionUtil.getPersistenceContextForSession(session);
                EntityPersister entityPersister = HibernateSessionUtil.getEntityPersister(session, className,
                        bean);
                EntityKey entityKey = new EntityKey((Serializable) state[i], entityPersister,
                        session.getEntityMode());

                // Has a proxy already been created for this session?
                Object proxy = persContext.getProxy(entityKey);
                if (proxy == null) {
                    // There is no proxy anywhere for this object, so ask Hibernate to create one for us
                    proxy = entityPersister.createProxy((Serializable) state[i], (SessionImplementor) session);
                    persContext.getBatchFetchQueue().addBatchLoadableEntityKey(entityKey);
                    persContext.addProxy(entityKey, proxy);
                }
                values.put(propName, proxy);
            }
        }
    }
}

From source file:de.randi2.core.integration.modelDatabase.hibernate.HibernateMappingTest.java

License:Open Source License

/**
 * Walking over all mapped entities and getting a list of them to see,
 * if loading works correct./*  www  .j  a v a 2  s . c o m*/
 * 
 * @throws Exception
 */
@Test
public void testEverything() throws Exception {
    databaseUtil.setUpDatabaseEmpty();

    Map metadata = ((Session) entityManager.getDelegate()).getSessionFactory().getAllClassMetadata();
    for (Object persisterObject : metadata.values()) {
        EntityPersister persister = (EntityPersister) persisterObject;
        String className = persister.getClassMetadata().getEntityName();
        String queryString = "from " + className + " c";
        List result = entityManager.createQuery(queryString).getResultList();
        logger.debug("QUERY: " + queryString);
    }
}

From source file:de.randi2.core.unit.model.hibernate.HibernateMappingTest.java

License:Open Source License

/**
 * Walking over all mapped entities and getting a list of them to see,
 * if loading works correct./*www.  j av a2  s . c  om*/
 * 
 * @throws Exception
 */
@Test
public void testEverything() throws Exception {
    databaseUtil.setUpDatabaseEmpty();
    Map metadata = sessionFactory.getAllClassMetadata();
    for (Object persisterObject : metadata.values()) {
        Session session = sessionFactory.openSession();
        try {
            EntityPersister persister = (EntityPersister) persisterObject;
            String className = persister.getClassMetadata().getEntityName();
            String queryString = "from " + className + " c";
            List result = session.createQuery(queryString).list();
            logger.debug("QUERY: " + queryString);
        } finally {
            session.close();
        }
    }
}

From source file:org.babyfish.hibernate.internal.SessionImplWrapper.java

License:Open Source License

@SuppressWarnings("unchecked")
protected static void delete(XSessionImplementor sessionProxy, Object object) {
    if (object != null) {
        SessionFactory sessionFactory = sessionProxy.getRawSessionImpl().getSessionFactory();
        PersistenceContext persistenceContext = ((org.hibernate.internal.SessionImpl) sessionProxy
                .getRawSessionImpl()).getPersistenceContext();
        Map<PersistentCollection, CollectionEntry> collectionEntries = persistenceContext
                .getCollectionEntries();
        for (Entry<PersistentCollection, CollectionEntry> entry : collectionEntries.entrySet()) {
            PersistentCollection persistentCollection = entry.getKey();
            if (persistentCollection.wasInitialized()) {
                CollectionMetadata collectionMetadata = sessionFactory
                        .getCollectionMetadata(persistentCollection.getRole());
                Class<?> elementClass = collectionMetadata.getElementType().getReturnedClass();
                if (elementClass.isAssignableFrom(object.getClass())) {
                    if (persistentCollection instanceof Map<?, ?>) {
                        ((Map<?, ?>) persistentCollection).values().remove(object);
                    } else if (persistentCollection instanceof Collection<?>) {
                        ((Collection<?>) persistentCollection).remove(object);
                    }//from  ww w.  j  ava  2  s  . c  om
                }
            }
        }
        Class<?> clazz = object.getClass();
        Collection<HbmReference> hbmReferences = null;
        NavigableMap<Class<?>, Collection<HbmReference>> hbmReferencesByTargetClass = (NavigableMap<Class<?>, Collection<HbmReference>>) ((XSessionFactoryImplementor) sessionProxy
                .getFactory()).getInternalData(SessionFactoryImplWrapper.IDK_HBM_REFERENCES_BY_TARGET_CLASS);
        for (Entry<Class<?>, Collection<HbmReference>> entry : hbmReferencesByTargetClass.descendingMap()
                .entrySet()) {
            if (entry.getKey().isAssignableFrom(clazz)) {
                hbmReferences = entry.getValue();
                break;
            }
        }
        if (hbmReferences != null) {
            EntityReferenceComparator<? super Object> referenceComparator = EntityReferenceComparator
                    .getInstance();
            Entry<Object, EntityEntry>[] entityEntries = persistenceContext.reentrantSafeEntityEntries();
            if (entityEntries != null) {
                for (Entry<Object, EntityEntry> entry : entityEntries) {
                    Object entity = entry.getKey();
                    if (Hibernate.isInitialized(entity)) {
                        EntityPersister persister = entry.getValue().getPersister();
                        ClassMetadata classMetadata = persister.getClassMetadata();
                        for (HbmReference hbmReference : hbmReferences) {
                            if (hbmReference.ownerMetadata == classMetadata) {
                                Object expectedObject = persister.getPropertyValue(entity,
                                        hbmReference.propertyIndex);
                                if (referenceComparator.same(expectedObject, object)) {
                                    persister.setPropertyValue(entity, hbmReference.propertyIndex, null);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    sessionProxy.getRawSessionImpl().delete(object);
}

From source file:org.opentaps.foundation.infrastructure.Infrastructure.java

License:Open Source License

/**
 * Gets the Hibernate <code>SessionFactory</code> object for the corresponding delegator.
 * A Map of delegatorName to SessionFactory is maintained, and the first time a SessionFactory is requested for.
 * A delegatorName, it is created in the the following way:
 * <ul>//  w  w  w.j  a  v  a 2s  .  co  m
 * <li>First, get the data source for the group helper (ie, "org.ofbiz" in entitygroup.xml) and that delegator</li>
 * <li>Then, get the hibernate cfg xml for the data source</li>
 * <li>Finally, use that hibernate cfg xml to create a SessionFactory</li>
 * </ul>
 * @param delegatorName a <code>String</code> value
 * @return a Hibernate <code>SessionFactory</code> value
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public static synchronized SessionFactory getSessionFactory(String delegatorName) {
    SessionFactory sessionFactory = sessionFactories.get(delegatorName);
    // the sessionFactory haven't init before
    if (sessionFactory == null) {
        Debug.logVerbose("building hibernate SessionFactory ...", MODULE);
        AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration();
        Delegator delegator = DelegatorFactory.getDelegator(delegatorName);
        //for support eccas, construct persist event listener arrays
        PersistEventListener[] persistEventListeners = { new EcaPersistEventListener(delegator) };
        //for support eccas, construct load event listener arrays
        LoadEventListener[] loadEventListeners = { new EcaLoadEventListener(delegator) };
        //for support eccas, construct delete event listener arrays
        DeleteEventListener[] deleteEventListeners = { new EcaDeleteEventListener(delegator) };
        //for support eccas, construct saveOrUpdate event listener arrays
        SaveOrUpdateEventListener[] saveOrUpdateEventListeners = {
                new EcaSaveOrUpdateEventListener(delegator) };
        //for support eccas, construct saveOrUpdate event listener arrays
        SaveOrUpdateEventListener[] saveEventListeners = { new EcaSaveEventListener(delegator) };
        //register our event listener arrays
        annotationConfiguration.getEventListeners().setPersistEventListeners(persistEventListeners);
        annotationConfiguration.getEventListeners().setSaveOrUpdateEventListeners(saveOrUpdateEventListeners);
        annotationConfiguration.getEventListeners().setDeleteEventListeners(deleteEventListeners);
        annotationConfiguration.getEventListeners().setLoadEventListeners(loadEventListeners);
        annotationConfiguration.getEventListeners().setSaveEventListeners(saveEventListeners);
        annotationConfiguration.getEventListeners().setUpdateEventListeners(saveOrUpdateEventListeners);
        //get groupHelpName for retrieve database connection information.
        String groupHelperName = EntityConfigUtil.getDelegatorInfo(delegatorName).groupMap.get(getHelperName());
        Debug.logVerbose("groupHelperName : " + groupHelperName, MODULE);
        //get database source information
        DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(groupHelperName);
        Debug.logVerbose("datasourceInfo.fieldTypeName : " + datasourceInfo.fieldTypeName, MODULE);
        //get hibernate dialect by database type
        String dialect = DIALECTS.get(datasourceInfo.fieldTypeName);
        if (dialect.length() == 0) {
            // some rarely used types are not supported
            Debug.logError("No hibernate dialect defined for the type [" + datasourceInfo.fieldTypeName + "]",
                    MODULE);
            return null;
        }
        annotationConfiguration.setProperty("hibernate.dialect", dialect);
        Debug.logVerbose("configuring SessionFactory ...", MODULE);
        //build a sessionFactory
        String datasourceName = EntityConfigUtil.getDelegatorInfo(delegatorName).groupMap.get(getHelperName());
        Debug.logVerbose("init sessionFactory by datasoure " + datasourceName, MODULE);
        sessionFactory = annotationConfiguration.configure(datasourceName + HIBERNATE_CFG_EXT)
                .buildSessionFactory();
        Debug.logVerbose("listing loaded entities ...", MODULE);
        //iterator all classes which are success load of hibernate, it just only for debug use.
        if (Debug.isOn(Debug.VERBOSE)) {
            Map metadata = sessionFactory.getAllClassMetadata();
            for (Iterator<EntityPersister> i = metadata.values().iterator(); i.hasNext();) {
                EntityPersister persister = i.next();
                String className = persister.getClassMetadata().getEntityName();
                Debug.logVerbose("SessionFactory Successfully Loaded AnnotatedClass : " + className, MODULE);
            }
        }
        sessionFactories.put(delegatorName, sessionFactory);
    }
    return sessionFactory;
}