Example usage for org.hibernate.internal SessionFactoryImpl getAllClassMetadata

List of usage examples for org.hibernate.internal SessionFactoryImpl getAllClassMetadata

Introduction

In this page you can find the example usage for org.hibernate.internal SessionFactoryImpl getAllClassMetadata.

Prototype

@Override
    public Map<String, ClassMetadata> getAllClassMetadata() throws HibernateException 

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;
    try {//w  ww.  java 2 s  .  c o  m
        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.babyfish.hibernate.internal.SessionFactoryImplWrapper.java

License:Open Source License

static NavigableMap<Class<?>, Collection<HbmReference>> createHbmReferencesByTargetClass(
        SessionFactoryImpl sessionFactoryImpl) {
    NavigableMap<Class<?>, Collection<HbmReference>> hbmReferencesByTargetClass = new TreeMap<Class<?>, Collection<HbmReference>>(
            new Comparator<Class<?>>() {
                @Override/*from ww w . j a v  a2s  . co m*/
                public int compare(Class<?> o1, Class<?> o2) {
                    if (o1 == o2) {
                        return 0;
                    }
                    if (o1.isAssignableFrom(o2)) {
                        return -1;
                    }
                    if (o2.isAssignableFrom(o1)) {
                        return +1;
                    }
                    //TODO: big bug
                    return o1.hashCode() - o2.hashCode();
                }
            });
    Map<String, ClassMetadata> classClassMetadatas = sessionFactoryImpl.getAllClassMetadata();
    for (ClassMetadata classMetadata : classClassMetadatas.values()) {
        Type[] propertyTypes = classMetadata.getPropertyTypes();
        for (int i = propertyTypes.length - 1; i >= 0; i--) {
            Type propertyType = propertyTypes[i];
            if (propertyType instanceof EntityType) {
                Class<?> targetClass = propertyType.getReturnedClass();
                Collection<HbmReference> hbmReferences = hbmReferencesByTargetClass.get(targetClass);
                if (hbmReferences == null) {
                    hbmReferences = new ArrayList<HbmReference>();
                    hbmReferencesByTargetClass.put(targetClass, hbmReferences);
                }
                hbmReferences.add(new HbmReference(classMetadata, i));
            }
        }
    }
    for (Entry<?, Collection<HbmReference>> entry : hbmReferencesByTargetClass.entrySet()) {
        entry.setValue(MACollections.unmodifiable(entry.getValue()));
    }
    return MACollections.unmodifiable(hbmReferencesByTargetClass);
}