Example usage for org.hibernate.persister.collection AbstractCollectionPersister getElementType

List of usage examples for org.hibernate.persister.collection AbstractCollectionPersister getElementType

Introduction

In this page you can find the example usage for org.hibernate.persister.collection AbstractCollectionPersister getElementType.

Prototype

@Override
    public Type getElementType() 

Source Link

Usage

From source file:com.autobizlogic.abl.metadata.hibernate.HibMetaRole.java

License:Open Source License

/**
 * Get the inverse of a one-to-many role
 * @param entityName The entity owning the role
 * @param rName The role name/*from  w w w . ja v  a 2 s .c  o m*/
 * @return Null if no inverse was found, otherwise [entity name, role name] of the inverse role
 */
private String[] getInverseOfCollectionRole(String entityName, String rName) {
    String[] result = new String[2];

    SessionFactory sessFact = ((HibMetaModel) getMetaEntity().getMetaModel()).getSessionFactory();
    AbstractCollectionPersister parentMeta = (AbstractCollectionPersister) sessFact
            .getCollectionMetadata(entityName + "." + rName);
    if (parentMeta == null) { // Could be inherited -- search through superclasses
        while (parentMeta == null) {
            Class<?> cls = null;
            if (getMetaEntity().getEntityType() == MetaEntity.EntityType.POJO)
                cls = sessFact.getClassMetadata(entityName).getMappedClass(EntityMode.POJO);
            else
                cls = sessFact.getClassMetadata(entityName).getMappedClass(EntityMode.MAP);
            Class<?> superCls = cls.getSuperclass();
            if (superCls.getName().equals("java.lang.Object"))
                throw new RuntimeException(
                        "Unable to retrieve Hibernate information for collection " + entityName + "." + rName);
            ClassMetadata clsMeta = sessFact.getClassMetadata(superCls);
            if (clsMeta == null)
                throw new RuntimeException("Unable to retrieve Hibernate information for collection "
                        + entityName + "." + rName + ", even from superclass(es)");
            entityName = clsMeta.getEntityName();
            parentMeta = (AbstractCollectionPersister) sessFact.getCollectionMetadata(entityName + "." + rName);
        }
    }
    String[] colNames = parentMeta.getKeyColumnNames();
    String childName = parentMeta.getElementType().getName();

    AbstractEntityPersister childMeta = (AbstractEntityPersister) sessFact.getClassMetadata(childName);
    String[] propNames = childMeta.getPropertyNames();
    for (int i = 0; i < propNames.length; i++) {
        Type type = childMeta.getPropertyType(propNames[i]);
        if (!type.isEntityType())
            continue;
        EntityType entType = (EntityType) type;
        if (!entType.getAssociatedEntityName().equals(entityName))
            continue;
        String[] cnames = childMeta.getPropertyColumnNames(i);
        if (cnames.length != colNames.length)
            continue;
        boolean columnMatch = true;
        for (int j = 0; j < cnames.length; j++) {
            if (!cnames[j].equals(colNames[j])) {
                columnMatch = false;
                break;
            }
        }
        if (columnMatch) {
            result[0] = childName;
            result[1] = propNames[i];
            return result;
        }
    }

    return null;
}

From source file:net.digitalprimates.persistence.translators.hibernate.HibernateSerializer.java

License:Open Source License

private List getCollectionProxies(PersistentCollection collection) {
    try {//from  w w w. ja v  a2 s  .  c o  m
        EventSource session = (EventSource) sessionManager.getCurrentSession();

        // CollectionMetadata metadata =
        // eventSession.getFactory().getCollectionMetadata(collection.getRole());
        CollectionPersister persister = session.getFactory().getCollectionPersister(collection.getRole());

        if (persister instanceof AbstractCollectionPersister) {
            AbstractCollectionPersister absPersister = (AbstractCollectionPersister) persister;
            String className = absPersister.getElementType().getName();

            if (session instanceof SessionImpl) {
                List pkIds = getPkIds(session, persister, collection);

                // create a new HibernateProxy for each id.
                List proxies = new ArrayList();
                Iterator pkItr = pkIds.iterator();
                while (pkItr.hasNext()) {
                    Object key = pkItr.next();

                    // create flex object to represent the
                    // PersistanceProxy
                    ASObject as = new ASObject();// new
                    // ExternalASObject();
                    as.setType(className);
                    as.put(HibernateProxyConstants.UID, UUID.randomUUID().toString());
                    as.put(HibernateProxyConstants.PKEY, key);
                    as.put(HibernateProxyConstants.PROXYINITIALIZED, false);
                    proxies.add(as);
                }
                return proxies;
            }
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    } catch (Throwable ex) {
        ex.printStackTrace();
    }
    return null;
}