List of usage examples for org.hibernate.persister.collection AbstractCollectionPersister getElementType
@Override
public Type getElementType()
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; }