Java 类org.hibernate.type.ComponentType 实例源码

项目:APacheSynapseSimplePOC    文件:Hibernate1.java   
static Object makeCaller ( Object tpl, Object getters ) throws NoSuchMethodException, InstantiationException, IllegalAccessException,
        InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException {
    PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class);
    Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters);

    ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]);
    Reflections.setFieldValue(t, "componentTuplizer", tup);
    Reflections.setFieldValue(t, "propertySpan", 1);
    Reflections.setFieldValue(t, "propertyTypes", new Type[] {
        t
    });

    TypedValue v1 = new TypedValue(t, null);
    Reflections.setFieldValue(v1, "value", tpl);
    Reflections.setFieldValue(v1, "type", t);

    TypedValue v2 = new TypedValue(t, null);
    Reflections.setFieldValue(v2, "value", tpl);
    Reflections.setFieldValue(v2, "type", t);

    return Gadgets.makeMap(v1, v2);
}
项目:lams    文件:AbstractEntityTuplizer.java   
/**
 * Extract a component property value.
 *
 * @param type The component property types.
 * @param component The component instance itself.
 * @param propertyPath The property path for the property to be extracted.
 * @return The property value extracted.
 */
protected Object getComponentValue(ComponentType type, Object component, String propertyPath) {
    final int loc = propertyPath.indexOf( '.' );
    final String basePropertyName = loc > 0
            ? propertyPath.substring( 0, loc )
            : propertyPath;
    final int index = findSubPropertyIndex( type, basePropertyName );
    final Object baseValue = type.getPropertyValue( component, index );
    if ( loc > 0 ) {
        if ( baseValue == null ) {
            return null;
        }
        return getComponentValue(
                (ComponentType) type.getSubtypes()[index],
                baseValue,
                propertyPath.substring(loc+1)
        );
    }
    else {
        return baseValue;
    }

}
项目:lams    文件:AbstractPersistentCollection.java   
@Override
public boolean needsRecreate(CollectionPersister persister) {
    // Workaround for situations like HHH-7072.  If the collection element is a component that consists entirely
    // of nullable properties, we currently have to forcefully recreate the entire collection.  See the use
    // of hasNotNullableColumns in the AbstractCollectionPersister constructor for more info.  In order to delete
    // row-by-row, that would require SQL like "WHERE ( COL = ? OR ( COL is null AND ? is null ) )", rather than
    // the current "WHERE COL = ?" (fails for null for most DBs).  Note that
    // the param would have to be bound twice.  Until we eventually add "parameter bind points" concepts to the
    // AST in ORM 5+, handling this type of condition is either extremely difficult or impossible.  Forcing
    // recreation isn't ideal, but not really any other option in ORM 4.
    if (persister.getElementType() instanceof ComponentType) {
        ComponentType componentType = (ComponentType) persister.getElementType();
        return !componentType.hasNotNullProperty();
    }
    return false;
}
项目:lams    文件:ComponentJoin.java   
public ComponentJoin(
        FromClause fromClause,
        FromElement origin,
        String alias,
        String componentPath,
        ComponentType componentType) {
    super( fromClause, origin, alias );
    this.componentPath = componentPath;
    this.componentType = componentType;
    this.componentProperty = StringHelper.unqualify( componentPath );
    fromClause.addJoinByPathMap( componentPath, this );
    initializeComponentJoin( new ComponentFromElementType( this ) );

    this.columns = origin.getPropertyMapping( "" ).toColumns( getTableAlias(), componentProperty );
    StringBuilder buf = new StringBuilder();
    for ( int j = 0; j < columns.length; j++ ) {
        final String column = columns[j];
        if ( j > 0 ) {
            buf.append( ", " );
        }
        buf.append( column );
    }
    this.columnsFragment = buf.toString();
}
项目:ysoserial-modified    文件:Hibernate1.java   
static Object makeCaller ( Object tpl, Object getters ) throws NoSuchMethodException, InstantiationException, IllegalAccessException,
        InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException {
    PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class);
    Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters);

    ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]);
    Reflections.setFieldValue(t, "componentTuplizer", tup);
    Reflections.setFieldValue(t, "propertySpan", 1);
    Reflections.setFieldValue(t, "propertyTypes", new Type[] {
        t
    });

    TypedValue v1 = new TypedValue(t, null);
    Reflections.setFieldValue(v1, "value", tpl);
    Reflections.setFieldValue(v1, "type", t);

    TypedValue v2 = new TypedValue(t, null);
    Reflections.setFieldValue(v2, "value", tpl);
    Reflections.setFieldValue(v2, "type", t);

    return Gadgets.makeMap(v1, v2);
}
项目:ysoserial-plus    文件:Hibernate1.java   
static Object makeCaller ( Object tpl, Object getters ) throws NoSuchMethodException, InstantiationException, IllegalAccessException,
        InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException {
    PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class);
    Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters);

    ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]);
    Reflections.setFieldValue(t, "componentTuplizer", tup);
    Reflections.setFieldValue(t, "propertySpan", 1);
    Reflections.setFieldValue(t, "propertyTypes", new Type[] {
        t
    });

    TypedValue v1 = new TypedValue(t, null);
    Reflections.setFieldValue(v1, "value", tpl);
    Reflections.setFieldValue(v1, "type", t);

    TypedValue v2 = new TypedValue(t, null);
    Reflections.setFieldValue(v2, "value", tpl);
    Reflections.setFieldValue(v2, "type", t);

    return Gadgets.makeMap(v1, v2);
}
项目:cacheonix-core    文件:AbstractEntityTuplizer.java   
public Object getPropertyValue(Object entity, String propertyPath) throws HibernateException {

    int loc = propertyPath.indexOf('.');
    String basePropertyName = loc>0 ?
        propertyPath.substring(0, loc) : propertyPath;

    int index = entityMetamodel.getPropertyIndex( basePropertyName );
    Object baseValue = getPropertyValue( entity, index );
    if ( loc>0 ) {
        ComponentType type = (ComponentType) entityMetamodel.getPropertyTypes()[index];
        return getComponentValue( type, baseValue, propertyPath.substring(loc+1) );
    }
    else {
        return baseValue;
    }
}
项目:cacheonix-core    文件:ASTParserLoadingTest.java   
public void testComponentQueries() {
    Session s = openSession();
    s.beginTransaction();

    Type[] types = s.createQuery( "select h.name from Human h" ).getReturnTypes();
    assertEquals( 1, types.length );
    assertTrue( types[0] instanceof ComponentType );

    // Test the ability to perform comparisions between component values
    s.createQuery( "from Human h where h.name = h.name" ).list();
    s.createQuery( "from Human h where h.name = :name" ).setParameter( "name", new Name() ).list();
    s.createQuery( "from Human where name = :name" ).setParameter( "name", new Name() ).list();
    s.createQuery( "from Human h where :name = h.name" ).setParameter( "name", new Name() ).list();
    s.createQuery( "from Human h where :name <> h.name" ).setParameter( "name", new Name() ).list();

    // Test the ability to perform comparisions between a component and an explicit row-value
    s.createQuery( "from Human h where h.name = ('John', 'X', 'Doe')" ).list();
    s.createQuery( "from Human h where ('John', 'X', 'Doe') = h.name" ).list();
    s.createQuery( "from Human h where ('John', 'X', 'Doe') <> h.name" ).list();
    s.createQuery( "from Human h where ('John', 'X', 'Doe') >= h.name" ).list();

    s.createQuery( "from Human h order by h.name" ).list();

    s.getTransaction().commit();
    s.close();
}
项目:ysoserial    文件:Hibernate1.java   
static Object makeCaller ( Object tpl, Object getters ) throws NoSuchMethodException, InstantiationException, IllegalAccessException,
        InvocationTargetException, NoSuchFieldException, Exception, ClassNotFoundException {
    PojoComponentTuplizer tup = Reflections.createWithoutConstructor(PojoComponentTuplizer.class);
    Reflections.getField(AbstractComponentTuplizer.class, "getters").set(tup, getters);

    ComponentType t = Reflections.createWithConstructor(ComponentType.class, AbstractType.class, new Class[0], new Object[0]);
    Reflections.setFieldValue(t, "componentTuplizer", tup);
    Reflections.setFieldValue(t, "propertySpan", 1);
    Reflections.setFieldValue(t, "propertyTypes", new Type[] {
        t
    });

    TypedValue v1 = new TypedValue(t, null);
    Reflections.setFieldValue(v1, "value", tpl);
    Reflections.setFieldValue(v1, "type", t);

    TypedValue v2 = new TypedValue(t, null);
    Reflections.setFieldValue(v2, "value", tpl);
    Reflections.setFieldValue(v2, "type", t);

    return Gadgets.makeMap(v1, v2);
}
项目:breeze.server.java    文件:RelationshipFixer.java   
/**
 * Get the value of the foreign key property.  This comes from the entity, but if that value is
 * null, and the entity is deleted, we try to get it from the originalValuesMap.
 * @param entityInfo Breeze EntityInfo
 * @param meta Metadata for the entity class
 * @param foreignKeyName Name of the foreign key property of the entity, e.g. "CustomerID"
 * @return
 */
private Object getForeignKeyValue(EntityInfo entityInfo, ClassMetadata meta, String foreignKeyName) {
    Object entity = entityInfo.entity;
    Object id = null;
    if (foreignKeyName.equalsIgnoreCase(meta.getIdentifierPropertyName())) {
        id = meta.getIdentifier(entity, null);
    } else if (Arrays.asList(meta.getPropertyNames()).contains(foreignKeyName)) {
        id = meta.getPropertyValue(entity, foreignKeyName);
    } else if (meta.getIdentifierType().isComponentType()) {
        // compound key
        ComponentType compType = (ComponentType) meta.getIdentifierType();
        int index = Arrays.asList(compType.getPropertyNames()).indexOf(foreignKeyName);
        if (index >= 0) {
            Object idComp = meta.getIdentifier(entity, null);
            id = compType.getPropertyValue(idComp, index, EntityMode.POJO);
        }
    }

    if (id == null && entityInfo.entityState == EntityState.Deleted) {
        id = entityInfo.originalValuesMap.get(foreignKeyName);
    }
    return id;
}
项目:enterprise-app    文件:CustomHbnContainer.java   
/**
 * This is an HbnContainer specific utility method that is used to retrieve the list of embedded property key
 * identifiers.
 */
protected Collection<String> getEmbeddedKeyPropertyIds()
{
    logger.executionTrace();

    final ArrayList<String> embeddedKeyPropertyIds = new ArrayList<String>();
    final Type identifierType = classMetadata.getIdentifierType();

    if (identifierType.isComponentType())
    {
        final ComponentType idComponent = (ComponentType) identifierType;
        final String[] propertyNameArray = idComponent.getPropertyNames();

        if (propertyNameArray != null)
        {
            final List<String> propertyNames = Arrays.asList(propertyNameArray);
            embeddedKeyPropertyIds.addAll(propertyNames);
        }
    }

    return embeddedKeyPropertyIds;
}
项目:enterprise-app    文件:CustomHbnContainer.java   
/**
 * This is an internal HbnContainer utility method. Determines if a property is contained within an embedded key.
 */
protected boolean propertyInEmbeddedKey(Object propertyId)
{
    logger.executionTrace();

    if (embeddedPropertiesCache.containsKey(propertyId))
        return embeddedPropertiesCache.get(propertyId);

    final Type identifierType = classMetadata.getIdentifierType();

    if (identifierType.isComponentType())
    {
        final ComponentType componentType = (ComponentType) identifierType;
        final String[] idPropertyNames = componentType.getPropertyNames();
        final List<String> idPropertyNameList = Arrays.asList(idPropertyNames);
        return idPropertyNameList.contains(propertyId);
    }

    return false;
}
项目:further-open-core    文件:GroupByHavingProjection.java   
/**
 * Private helper method to construct component ids with an optional alias.
 *
 * @param sb
 *            a {@link StringBuffer}
 * @param componentType
 *            the {@link ComponentType}
 * @param criteriaQuery
 *            the {@link CriteriaQuery}
 * @param criteria
 *            the {@link Criteria}
 * @param position
 *            the position of the alias, appened if >= 0
 */
private void appendComponentIds(final StringBuffer sb,
        final ComponentType componentType, final CriteriaQuery criteriaQuery,
        final Criteria criteria, final Integer position)
{
    final String[] idProperties = componentType.getPropertyNames();
    int currPos = position != null ? position.intValue() : -1;
    for (int i = 0; i < idProperties.length; i++)
    {
        sb.append(criteriaQuery.getColumn(criteria, groupByProperty + "."
                + idProperties[i]));

        if (currPos >= 0)
        {
            sb.append(" as y").append(currPos).append('_');
            currPos++;
        }

        if (i + 1 < idProperties.length)
        {
            sb.append(", ");
        }
    }
}
项目:lams    文件:ComponentCollectionCriteriaInfoProvider.java   
ComponentCollectionCriteriaInfoProvider(QueryableCollection persister) {
    this.persister = persister;
    if ( !persister.getElementType().isComponentType() ) {
        throw new IllegalArgumentException( "persister for role " + persister.getRole() + " is not a collection-of-component" );
    }

    ComponentType componentType = (ComponentType) persister.getElementType();
    String[] names = componentType.getPropertyNames();
    Type[] types = componentType.getSubtypes();

    for ( int i = 0; i < names.length; i++ ) {
        subTypes.put( names[i], types[i] );
    }

}
项目:lams    文件:EntityLoadQueryDetails.java   
@Override
public Object readRow(ResultSet resultSet, ResultSetProcessingContextImpl context) throws SQLException {
    final ResultSetProcessingContext.EntityReferenceProcessingState processingState =
            rootReturnReader.getIdentifierResolutionContext( context );
    // if the entity reference we are hydrating is a Return, it is possible that its EntityKey is
    // supplied by the QueryParameter optional entity information
    if ( context.shouldUseOptionalEntityInformation() && context.getQueryParameters().getOptionalId() != null ) {
        EntityKey entityKey = ResultSetProcessorHelper.getOptionalObjectKey(
                context.getQueryParameters(),
                context.getSession()
        );
        processingState.registerIdentifierHydratedForm( entityKey.getIdentifier() );
        processingState.registerEntityKey( entityKey );
        final EntityPersister entityPersister = processingState.getEntityReference().getEntityPersister();
        if ( entityPersister.getIdentifierType().isComponentType()  ) {
            final ComponentType identifierType = (ComponentType) entityPersister.getIdentifierType();
            if ( !identifierType.isEmbedded() ) {
                addKeyManyToOnesToSession(
                        context,
                        identifierType,
                        entityKey.getIdentifier()
                );
            }
        }
    }
    return super.readRow( resultSet, context );
}
项目:lams    文件:EntityLoadQueryDetails.java   
private void addKeyManyToOnesToSession(ResultSetProcessingContextImpl context, ComponentType componentType, Object component ) {
    for ( int i = 0 ; i < componentType.getSubtypes().length ; i++ ) {
        final Type subType = componentType.getSubtypes()[ i ];
        final Object subValue = componentType.getPropertyValue( component, i, context.getSession() );
        if ( subType.isEntityType() ) {
            ( (Session) context.getSession() ).buildLockRequest( LockOptions.NONE ).lock( subValue );
        }
        else if ( subType.isComponentType() ) {
            addKeyManyToOnesToSession( context, (ComponentType) subType, subValue  );
        }
    }
}
项目:lams    文件:AbstractEntityTuplizer.java   
private static MappedIdentifierValueMarshaller buildMappedIdentifierValueMarshaller(
        ComponentType mappedIdClassComponentType,
        ComponentType virtualIdComponent) {
    // so basically at this point we know we have a "mapped" composite identifier
    // which is an awful way to say that the identifier is represented differently
    // in the entity and in the identifier value.  The incoming value should
    // be an instance of the mapped identifier class (@IdClass) while the incoming entity
    // should be an instance of the entity class as defined by metamodel.
    //
    // However, even within that we have 2 potential scenarios:
    //      1) @IdClass types and entity @Id property types match
    //          - return a NormalMappedIdentifierValueMarshaller
    //      2) They do not match
    //          - return a IncrediblySillyJpaMapsIdMappedIdentifierValueMarshaller
    boolean wereAllEquivalent = true;
    // the sizes being off is a much bigger problem that should have been caught already...
    for ( int i = 0; i < virtualIdComponent.getSubtypes().length; i++ ) {
        if ( virtualIdComponent.getSubtypes()[i].isEntityType()
                && ! mappedIdClassComponentType.getSubtypes()[i].isEntityType() ) {
            wereAllEquivalent = false;
            break;
        }
    }

    return wereAllEquivalent
            ? new NormalMappedIdentifierValueMarshaller( virtualIdComponent, mappedIdClassComponentType )
            : new IncrediblySillyJpaMapsIdMappedIdentifierValueMarshaller( virtualIdComponent, mappedIdClassComponentType );
}
项目:lams    文件:AbstractEntityTuplizer.java   
private IncrediblySillyJpaMapsIdMappedIdentifierValueMarshaller(ComponentType virtualIdComponent, ComponentType mappedIdentifierType) {
    this.virtualIdComponent = virtualIdComponent;
    this.mappedIdentifierType = mappedIdentifierType;
}
项目:lams    文件:AbstractEntityTuplizer.java   
@Override
public Object getPropertyValue(Object entity, String propertyPath) throws HibernateException {
    int loc = propertyPath.indexOf('.');
    String basePropertyName = loc > 0
            ? propertyPath.substring( 0, loc )
            : propertyPath;
    //final int index = entityMetamodel.getPropertyIndexOrNull( basePropertyName );
    Integer index = entityMetamodel.getPropertyIndexOrNull( basePropertyName );
    if (index == null) {
        propertyPath = PropertyPath.IDENTIFIER_MAPPER_PROPERTY + "." + propertyPath;
        loc = propertyPath.indexOf('.');
        basePropertyName = loc > 0
            ? propertyPath.substring( 0, loc )
            : propertyPath;
    }
    index = entityMetamodel.getPropertyIndexOrNull( basePropertyName );
    final Object baseValue = getPropertyValue( entity, index );
    if ( loc > 0 ) {
        if ( baseValue == null ) {
            return null;
        }
        return getComponentValue(
                (ComponentType) entityMetamodel.getPropertyTypes()[index],
                baseValue,
                propertyPath.substring(loc+1)
        );
    }
    else {
        return baseValue;
    }
}
项目:lams    文件:AbstractEntityTuplizer.java   
private int findSubPropertyIndex(ComponentType type, String subPropertyName) {
    final String[] propertyNames = type.getPropertyNames();
    for ( int index = 0; index<propertyNames.length; index++ ) {
        if ( subPropertyName.equals( propertyNames[index] ) ) {
            return index;
        }
    }
    throw new MappingException( "component property not found: " + subPropertyName );
}
项目:lams    文件:FromElementFactory.java   
public FromElement createComponentJoin(ComponentType type) {

        // need to create a "place holder" from-element that can store the component/alias for this
        //      component join
        return new ComponentJoin( fromClause, origin, classAlias, path, type );
    }
项目:engerek    文件:MidpointPersisterUtil.java   
private static void killUnwantedAssociationValues(String[] propertyNames, Type[] propertyTypes, Object[] values, int depth) {
    if (values == null) {
        return;
    }

    for (int i = 0; i < propertyTypes.length; i++) {
        String name = propertyNames[i];
        Type type = propertyTypes[i];
        Object value = values[i];
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("{}- killUnwantedAssociationValues processing #{}: {} (type={}, value={})",
                    StringUtils.repeat("  ", depth), i, name, type, value);
        }
        if (type instanceof ComponentType) {
            ComponentType componentType = (ComponentType) type;
            killUnwantedAssociationValues(componentType.getPropertyNames(), componentType.getSubtypes(), (Object[]) value, depth+1);
        } else if (type instanceof ManyToOneType) {
            if (ASSOCIATION_TO_REMOVE.equals(name)) {
                if (LOGGER.isTraceEnabled()) {
                    LOGGER.trace("{}- killUnwantedAssociationValues KILLED #{}: {} (type={}, value={})",
                            StringUtils.repeat("  ", depth), i, name, type, value);
                }
                values[i] = null;
            }
        }
    }
}
项目:cacheonix-core    文件:Component.java   
private Type buildType() {
    // TODO : temporary initial step towards HHH-1907
    ComponentMetamodel metamodel = new ComponentMetamodel( this );
    if ( isEmbedded() ) {
        return new EmbeddedComponentType( metamodel );
    }
    else {
        return new ComponentType( metamodel );
    }
}
项目:cacheonix-core    文件:AbstractEntityTuplizer.java   
public Serializable getIdentifier(Object entity) throws HibernateException {
    final Object id;
    if ( entityMetamodel.getIdentifierProperty().isEmbedded() ) {
        id = entity;
    }
    else {
        if ( idGetter == null ) {
            if (identifierMapperType==null) {
                throw new HibernateException( "The class has no identifier property: " + getEntityName() );
            }
            else {
                ComponentType copier = (ComponentType) entityMetamodel.getIdentifierProperty().getType();
                id = copier.instantiate( getEntityMode() );
                copier.setPropertyValues( id, identifierMapperType.getPropertyValues( entity, getEntityMode() ), getEntityMode() );
            }
        }
        else {
            id = idGetter.get( entity );
        }
    }

    try {
        return (Serializable) id;
    }
    catch ( ClassCastException cce ) {
        StringBuffer msg = new StringBuffer( "Identifier classes must be serializable. " );
        if ( id != null ) {
            msg.append( id.getClass().getName() + " is not serializable. " );
        }
        if ( cce.getMessage() != null ) {
            msg.append( cce.getMessage() );
        }
        throw new ClassCastException( msg.toString() );
    }
}
项目:cacheonix-core    文件:AbstractEntityTuplizer.java   
/**
 * Extract a component property value.
 *
 * @param type The component property types.
 * @param component The component instance itself.
 * @param propertyPath The property path for the property to be extracted.
 * @return The property value extracted.
 */
protected Object getComponentValue(ComponentType type, Object component, String propertyPath) {

    int loc = propertyPath.indexOf('.');
    String basePropertyName = loc>0 ?
        propertyPath.substring(0, loc) : propertyPath;

    String[] propertyNames = type.getPropertyNames();
    int index=0;
    for ( ; index<propertyNames.length; index++ ) {
        if ( basePropertyName.equals( propertyNames[index] ) ) break;
    }
    if (index==propertyNames.length) {
        throw new MappingException( "component property not found: " + basePropertyName );
    }

    Object baseValue = type.getPropertyValue( component, index, getEntityMode() );

    if ( loc>0 ) {
        ComponentType subtype = (ComponentType) type.getSubtypes()[index];
        return getComponentValue( subtype, baseValue, propertyPath.substring(loc+1) );
    }
    else {
        return baseValue;
    }

}
项目:midpoint    文件:MidpointPersisterUtil.java   
private static void killUnwantedAssociationValues(String[] propertyNames, Type[] propertyTypes, Object[] values, int depth) {
    if (values == null) {
        return;
    }

    for (int i = 0; i < propertyTypes.length; i++) {
        String name = propertyNames[i];
        Type type = propertyTypes[i];
        Object value = values[i];
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("{}- killUnwantedAssociationValues processing #{}: {} (type={}, value={})",
                    StringUtils.repeat("  ", depth), i, name, type, value);
        }
        if (type instanceof ComponentType) {
            ComponentType componentType = (ComponentType) type;
            killUnwantedAssociationValues(componentType.getPropertyNames(), componentType.getSubtypes(), (Object[]) value, depth+1);
        } else if (type instanceof ManyToOneType) {
            if (ASSOCIATION_TO_REMOVE.equals(name)) {
                if (LOGGER.isTraceEnabled()) {
                    LOGGER.trace("{}- killUnwantedAssociationValues KILLED #{}: {} (type={}, value={})",
                            StringUtils.repeat("  ", depth), i, name, type, value);
                }
                values[i] = null;
            }
        }
    }
}
项目:breeze.server.java    文件:RelationshipFixer.java   
/**
 * Handle a specific property if it is a Association or Component relationship.
 * @param propName
 * @param propType
 * @param entityInfo
 * @param meta
 */
private void processRelationship(String propName, Type propType, EntityInfo entityInfo, ClassMetadata meta) {
    if (propType.isAssociationType() && propType.isEntityType()) {
        fixupRelationship(propName, (EntityType) propType, entityInfo, meta);
    }
    else if (propType.isComponentType()) {
        fixupComponentRelationships(propName, (ComponentType) propType, entityInfo, meta);
    }
}
项目:breeze.server.java    文件:RelationshipFixer.java   
/**
 * Connect the related entities based on the foreign key values found in a component type.
 * This updates the values of the component's properties.
 * @param propName Name of the (component) property of the entity.  May be null if the property is the entity's identifier.
 * @param compType Type of the component
 * @param entityInfo Breeze EntityInfo
 * @param meta Metadata for the entity class
 */
private void fixupComponentRelationships(String propName, ComponentType compType, EntityInfo entityInfo, ClassMetadata meta) {
    String[] compPropNames = compType.getPropertyNames();
    Type[] compPropTypes = compType.getSubtypes();
    Object component = null;
    Object[] compValues = null;
    boolean isChanged = false;
    for (int j = 0; j < compPropNames.length; j++) {
        Type compPropType = compPropTypes[j];
        if (compPropType.isAssociationType() && compPropType.isEntityType())  {
            if (compValues == null) {
                // get the value of the component's subproperties
                component = getPropertyValue(meta, entityInfo.entity, propName);
                compValues = compType.getPropertyValues(component, EntityMode.POJO);
            }
            if (compValues[j] == null) {
                // the related entity is null
                Object relatedEntity = getRelatedEntity(compPropNames[j], (EntityType) compPropType, entityInfo, meta);
                if (relatedEntity != null)  {
                    compValues[j] = relatedEntity;
                    isChanged = true;
                }
            } else if (removeMode) {
                // remove the relationship
                compValues[j] = null;
                isChanged = true;
            }
        }
    }
    if (isChanged) {
        compType.setPropertyValues(component, compValues, EntityMode.POJO);
    }
}
项目:enterprise-app    文件:CustomHbnContainer.java   
/**
 * Gets the data type of all Properties identified by the given Property ID. This method does pretty much the same
 * thing as EntityItemProperty#getType()
 */
public Class<?> getType(Object propertyId)
{
    logger.executionTrace();

    // TODO: refactor to use same code as EntityItemProperty#getType()
    // This will also fix incomplete implementation of this method (for association types). Not critical as
    // Components don't really rely on this methods.

    if (addedProperties.keySet().contains(propertyId))
        return addedProperties.get(propertyId);

    if (propertyInEmbeddedKey(propertyId))
    {
        final ComponentType idType = (ComponentType) classMetadata.getIdentifierType();
        final String[] propertyNames = idType.getPropertyNames();

        for (int i = 0; i < propertyNames.length; i++)
        {
            String name = propertyNames[i];
            if (name.equals(propertyId))
            {
                String idName = classMetadata.getIdentifierPropertyName();
                try
                {
                    Field idField = entityType.getDeclaredField(idName);
                    Field propertyField = idField.getType().getDeclaredField((String) propertyId);
                    return propertyField.getType();
                }
                catch (NoSuchFieldException ex)
                {
                    throw new RuntimeException("Could not find the type of specified container property.", ex);
                }
            }
        }
    }

    Type propertyType = classMetadata.getPropertyType(propertyId.toString());
    return propertyType.getReturnedClass();
}
项目:further-open-core    文件:GroupByHavingProjection.java   
@Override
public String toSqlString(final Criteria criteria, final int position,
        final CriteriaQuery criteriaQuery) throws HibernateException
{
    final Type identifierType = criteriaQuery.getIdentifierType(criteria);
    if (identifierType.isComponentType())
    {
        final StringBuffer sb = new StringBuffer();
        appendComponentIds(sb, (ComponentType) identifierType, criteriaQuery,
                criteria, new Integer(position));
        return sb.toString();
    }
    return super.toSqlString(criteria, position, criteriaQuery);

}
项目:further-open-core    文件:GroupByHavingProjection.java   
@Override
public String toGroupSqlString(final Criteria criteria,
        final CriteriaQuery criteriaQuery) throws HibernateException
{
    final StringBuffer sb = new StringBuffer(50);

    final Type identifierType = criteriaQuery.getIdentifierType(criteria);
    if (identifierType.isComponentType())
    {
        appendComponentIds(sb, (ComponentType) identifierType, criteriaQuery,
                criteria, null);
    }
    else
    {
        sb.append(criteriaQuery.getColumn(criteria, groupByProperty));
    }

    // Append HAVING clause
    sb.append(" having ");
    sb.append("(");
    // Remove the alias
    final String proj = projection.toSqlString(criteria, 0xCAFEBABE, criteriaQuery);
    sb.append(proj.substring(0, proj.indexOf("as")).trim());
    sb.append(")");

    sb.append(SPACE_STRING)
            .append(op.getSqloperator())
            .append(SPACE_STRING)
            .append(value);

    return sb.toString();
}
项目:further-open-core    文件:HibernateUtil.java   
/**
 * @deprecated This method does not work well due to Hibernate bug HHH-817, nor does
 *             AliasToBeanResultTransformer handle multi-level property values.
 *             Therefore it should not be used.
 * @see http://opensource.atlassian.com/projects/hibernate/browse/HHH-817
 */
@Deprecated
public static Projection createProjectionList(final String identifierProperty,
        final Type identifierType, final String[] propertyNames,
        final Class<?> domainClass)
{
    final ProjectionList projectionList = Projections.projectionList();
    if (identifierType.isComponentType())
    {
        final String[] idProperties = ((ComponentType) (identifierType))
                .getPropertyNames();
        for (final String idProperty : idProperties)
        {
            final String idPath = identifierProperty + "." + idProperty;
            projectionList.add(Projections.property(idPath));
        }
    }
    else
    {
        projectionList.add(Projections.id());
    }
    for (final String propertyName : propertyNames)
    {
        final Field field = ReflectionUtils.findField(domainClass, propertyName);
        if (!hasAssociationAnnotation(field))
        {
            projectionList.add(Projections.property(propertyName), propertyName);
        }

    }
    return projectionList;
}
项目:midpoint    文件:MidpointPersisterUtil.java   
private static void killUnwantedAssociationValues(String[] propertyNames, Type[] propertyTypes, Object[] values, int depth) {
    if (values == null) {
        return;
    }

    for (int i = 0; i < propertyTypes.length; i++) {
        String name = propertyNames[i];
        Type type = propertyTypes[i];
        Object value = values[i];
        if (LOGGER.isTraceEnabled()) {
            LOGGER.trace("{}- killUnwantedAssociationValues processing #{}: {} (type={}, value={})",
                    StringUtils.repeat("  ", depth), i, name, type, value);
        }
        if (type instanceof ComponentType) {
            ComponentType componentType = (ComponentType) type;
            killUnwantedAssociationValues(componentType.getPropertyNames(), componentType.getSubtypes(), (Object[]) value, depth+1);
        } else if (type instanceof ManyToOneType) {
            if (ASSOCIATION_TO_REMOVE.equals(name)) {
                if (LOGGER.isTraceEnabled()) {
                    LOGGER.trace("{}- killUnwantedAssociationValues KILLED #{}: {} (type={}, value={})",
                            StringUtils.repeat("  ", depth), i, name, type, value);
                }
                values[i] = null;
            }
        }
    }
}
项目:lams    文件:AbstractEntityTuplizer.java   
private NormalMappedIdentifierValueMarshaller(ComponentType virtualIdComponent, ComponentType mappedIdentifierType) {
    this.virtualIdComponent = virtualIdComponent;
    this.mappedIdentifierType = mappedIdentifierType;
}
项目:lams    文件:ComponentJoin.java   
public ComponentType getComponentType() {
    return componentType;
}
项目:enterprise-app    文件:CustomHbnContainer.java   
/**
 * This method gets the value that is stored by the property. The returned object is compatible with the
 * class returned by getType().
 */
@SuppressWarnings("unchecked")
@Override
public Object getValue()
{
    logger.executionTrace();

    final Session session = sessionFactory.getCurrentSession();
    final SessionImplementor sessionImplementor = (SessionImplementor) session;

    if (!sessionFactory.getCurrentSession().contains(pojo))
        pojo = (T) session.get(entityType, (Serializable) getIdForPojo(pojo));

    if (propertyInEmbeddedKey(propertyName))
    {
        final ComponentType identifierType = (ComponentType) classMetadata.getIdentifierType();
        final String[] propertyNames = identifierType.getPropertyNames();

        for (int i = 0; i < propertyNames.length; i++)
        {
            String name = propertyNames[i];

            if (name.equals(propertyName))
            {
                final Object id = classMetadata.getIdentifier(pojo, sessionImplementor);
                return identifierType.getPropertyValue(id, i, EntityMode.POJO);
            }
        }
    }

    final Type propertyType = getPropertyType();
    final Object propertyValue = classMetadata.getPropertyValue(pojo, propertyName);

    if (!propertyType.isAssociationType())
        return propertyValue;

    if (propertyType.isCollectionType())
    {
        if (propertyValue == null)
            return null;

        final HashSet<Serializable> identifiers = new HashSet<Serializable>();
        final Collection<?> pojos = (Collection<?>) propertyValue;

        for (Object object : pojos)
        {
            if (!session.contains(object))
                object = session.merge(object);

            identifiers.add(session.getIdentifier(object));
        }

        return identifiers;
    }

    if (propertyValue == null)
        return null;

    final Class<?> propertyTypeClass = propertyType.getReturnedClass();
    final ClassMetadata metadata = sessionFactory.getClassMetadata(propertyTypeClass);
    final Serializable identifier = metadata.getIdentifier(propertyValue, sessionImplementor);

    return identifier;
}
项目:enterprise-app    文件:CustomHbnContainer.java   
/**
 * Returns the type of the Property. The methods getValue and setValue must be compatible with this type:
 * one must be able to safely cast the value returned from getValue to the given type and pass any variable
 * assignable to this type as an argument to setValue.
 */
public Class<?> getType()
{
    logger.executionTrace();

    if (propertyInEmbeddedKey(propertyName))
    {
        final ComponentType idType = (ComponentType) classMetadata.getIdentifierType();
        final String[] propertyNames = idType.getPropertyNames();

        for (String name : propertyNames)
        {
            if (name.equals(propertyName))
            {
                try
                {
                    final String identifierName = classMetadata.getIdentifierPropertyName();
                    final Field identifierField = entityType.getDeclaredField(identifierName);
                    final Field propertyField = identifierField.getType().getDeclaredField(propertyName);
                    return propertyField.getType();
                }
                catch (NoSuchFieldException e)
                {
                    logger.error(e);
                    throw new RuntimeException("Failed to find the type of the container property.", e);
                }
            }
        }
    }

    final Type propertyType = getPropertyType();

    if (propertyType.isCollectionType())
    {
        final Class<?> returnedClass = propertyType.getReturnedClass();
        return returnedClass;
    }

    if (propertyType.isAssociationType())
    {
        // For association the the property value type is the type of referenced types identifier.
        final ClassMetadata metadata = sessionFactory.getClassMetadata(
                classMetadata.getPropertyType(propertyName).getReturnedClass());

        return metadata.getIdentifierType().getReturnedClass();
    }

    return classMetadata.getPropertyType(propertyName).getReturnedClass();
}
项目:further-open-core    文件:HibernateDistinctIdExecutor.java   
/**
 * @param request
 * @return
 * @see edu.utah.further.core.chain.AbstractRequestHandler#process(edu.utah.further.core.api.chain.ChainRequest)
 * @see http://opensource.atlassian.com/projects/hibernate/browse/HHH-817
 */
@Override
public boolean process(final ChainRequest request)
{
    final HibernateExecReq executionReq = new HibernateExecReq(request);

    // Validate required input
    final GenericCriteria hibernateCriteria = executionReq.getResult();
    notNull(hibernateCriteria, "Expected Hibernate criteria");

    final Class<? extends PersistentEntity<?>> domainClass = executionReq
            .getRootEntity();
    final Class<? extends PersistentEntity<?>> entityClass = dao
            .getEntityClass(domainClass);

    notNull(entityClass, "Expected root entity class");

    final SessionFactory sessionFactory = executionReq.getSessionFactory();
    notNull(sessionFactory, "Expected SessionFactory");

    final ClassMetadata classMetadata = sessionFactory.getClassMetadata(entityClass);
    final String identifierName = classMetadata.getIdentifierPropertyName();
    final Type identifierType = classMetadata.getIdentifierType();

    // A hack to obtain projections out of the critieria by casting to the Hibernate
    // implementation. TODO: improve adapter to do that via interface access
    final ProjectionList projectionList = Projections.projectionList();
    final Projection existingProjection = ((CriteriaImpl) hibernateCriteria
            .getHibernateCriteria()).getProjection();

    if (existingProjection != null && !overrideExistingProjection)
    {
        return false;
    }

    if (identifierType.isComponentType())
    {
        final ComponentType componentType = (ComponentType) identifierType;
        final String[] idPropertyNames = componentType.getPropertyNames();

        // Add distinct to the first property
        projectionList.add(
                Projections.distinct(Property.forName(identifierName
                        + PROPERTY_SCOPE_CHAR + idPropertyNames[0])),
                idPropertyNames[0]);

        // Add the remaining properties to the projection list
        for (int i = 1; i < idPropertyNames.length; i++)
        {
            projectionList.add(
                    Property.forName(identifierName + PROPERTY_SCOPE_CHAR
                            + idPropertyNames[i]), idPropertyNames[i]);
        }

        hibernateCriteria.setProjection(projectionList);
        hibernateCriteria.setResultTransformer(new AliasToBeanResultTransformer(
                ReflectionUtils.findField(entityClass, identifierName).getType()));
    }
    else
    {
        // 'this' required to avoid HHH-817
        projectionList.add(Projections.distinct(Property.forName(THIS_CONTEXT
                + identifierName)));
        hibernateCriteria.setProjection(projectionList);
    }

    executionReq.setResult(hibernateCriteria);

    return false;
}
项目:screensaver    文件:FromElementFactory.java   
public FromElement createComponentJoin(ComponentType type) {
    // need to create a "place holder" from-element that can store the component/alias for this
    //      component join
    return new ComponentJoin( fromClause, origin, classAlias, path, type );
}
项目:lams    文件:HqlSqlWalker.java   
@Override
protected void createFromJoinElement(
        AST path,
        AST alias,
        int joinType,
        AST fetchNode,
        AST propertyFetch,
        AST with) throws SemanticException {
    boolean fetch = fetchNode != null;
    if ( fetch && isSubQuery() ) {
        throw new QueryException( "fetch not allowed in subquery from-elements" );
    }
    // The path AST should be a DotNode, and it should have been evaluated already.
    if ( path.getType() != SqlTokenTypes.DOT ) {
        throw new SemanticException( "Path expected for join!" );
    }
    DotNode dot = (DotNode) path;
    JoinType hibernateJoinType = JoinProcessor.toHibernateJoinType( joinType );
    dot.setJoinType( hibernateJoinType );    // Tell the dot node about the join type.
    dot.setFetch( fetch );
    // Generate an explicit join for the root dot node.   The implied joins will be collected and passed up
    // to the root dot node.
    dot.resolve( true, false, alias == null ? null : alias.getText() );

    final FromElement fromElement;
    if ( dot.getDataType() != null && dot.getDataType().isComponentType() ) {
        if ( dot.getDataType().isAnyType() ) {
            throw new SemanticException( "An AnyType attribute cannot be join fetched" );
            // ^^ because the discriminator (aka, the "meta columns") must be known to the SQL in
            //      a non-parameterized way.
        }
        FromElementFactory factory = new FromElementFactory(
                getCurrentFromClause(),
                dot.getLhs().getFromElement(),
                dot.getPropertyPath(),
                alias == null ? null : alias.getText(),
                null,
                false
        );
        fromElement = factory.createComponentJoin( (ComponentType) dot.getDataType() );
    }
    else {
        fromElement = dot.getImpliedJoin();
        fromElement.setAllPropertyFetch( propertyFetch != null );

        if ( with != null ) {
            if ( fetch ) {
                throw new SemanticException( "with-clause not allowed on fetched associations; use filters" );
            }
            handleWithFragment( fromElement, with );
        }
    }

    if ( LOG.isDebugEnabled() ) {
        LOG.debug( "createFromJoinElement() : " + getASTPrinter().showAsString( fromElement, "-- join tree --" ) );
    }
}