@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); CriteriaTools.checkPropertyNotARelation( enversService, entityName, propertyName ); parameters.addWhereWithFunction( alias, propertyName, " lower ", " like ", value.toLowerCase( Locale.ROOT ) ); }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName ); if ( relatedEntity == null ) { parameters.addNullRestriction( alias, propertyName ); } else { relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, null, alias, null, true ); } } }
public static String determinePropertyName( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, PropertyNameGetter propertyNameGetter) { return determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter.get( enversService ) ); }
final RelationDescription relationDescription = CriteriaTools.getRelatedEntity( enversService, ownerEntityName,
final List<String> identifierPropertyNames = identifierPropertyNames( sessionFactory, entityName ); if ( identifierPropertyNames.contains( propertyName ) ) { propertyName = enversService.getAuditEntitiesConfiguration().getOriginalIdPropName() + "." + propertyName;
@Override public AuditAssociationQueryImpl<Q> addOrder(AuditOrder order) { AuditOrder.OrderData orderData = order.getData( enversService ); String orderEntityAlias = orderData.getAlias( alias ); String orderEntityName = aliasToEntityNameMap.get( orderEntityAlias ); String propertyName = CriteriaTools.determinePropertyName( enversService, auditReader, orderEntityName, orderData.getPropertyName() ); queryBuilder.addOrder( orderEntityAlias, propertyName, orderData.isAscending() ); return this; }
public AuditAssociationQueryImpl( final AuditReaderImplementor auditReader, final Q parent, final QueryBuilder queryBuilder, final String propertyName, final JoinType joinType, final Map<String, String> aliasToEntityNameMap, final String ownerAlias, final String userSuppliedAlias) { this.auditReader = auditReader; this.parent = parent; this.queryBuilder = queryBuilder; this.joinType = joinType; String ownerEntityName = aliasToEntityNameMap.get( ownerAlias ); final RelationDescription relationDescription = CriteriaTools.getRelatedEntity( auditReader.getAuditService(), ownerEntityName, propertyName ); if ( relationDescription == null ) { throw new IllegalArgumentException( "Property " + propertyName + " of entity " + ownerEntityName + " is not a valid association for queries" ); } this.entityName = relationDescription.getToEntityName(); this.ownerAssociationIdMapper = relationDescription.getIdMapper(); this.ownerAlias = ownerAlias; this.alias = userSuppliedAlias == null ? queryBuilder.generateAlias() : userSuppliedAlias; aliasToEntityNameMap.put( this.alias, entityName ); this.aliasToEntityNameMap = aliasToEntityNameMap; parameters = queryBuilder.addParameters( this.alias ); }
/** * @param versionsReader Versions reader. * @param entityName Original entity name (not audited). * @param propertyName Property name or placeholder. * * @return Path to property. Handles identifier placeholder used by {@link org.hibernate.envers.query.criteria.AuditId}. */ public static String determinePropertyName( AuditReaderImplementor versionsReader, String entityName, String propertyName) { final SessionFactoryImplementor sessionFactory = versionsReader.getSessionImplementor().getFactory(); final AuditService auditService = versionsReader.getAuditService(); if ( AuditId.IDENTIFIER_PLACEHOLDER.equals( propertyName ) ) { final String identifierPropertyName = sessionFactory.getMetamodel() .findEntityDescriptor( entityName ).getIdentifierPropertyName(); propertyName = auditService.getOptions().getOriginalIdPropName() + "." + identifierPropertyName; } else { final List<String> identifierPropertyNames = identifierPropertyNames( sessionFactory, entityName ); if ( identifierPropertyNames.contains( propertyName ) ) { propertyName = auditService.getOptions().getOriginalIdPropName() + "." + propertyName; } } return propertyName; }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); CriteriaTools.checkPropertyNotARelation( enversService, entityName, propertyName ); parameters.addWhereWithParams( alias, propertyName, "in (", values, ")" ); } }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName ); if ( relatedEntity == null ) { throw new AuditException( "This criterion can only be used on a property that is a relation to another property." ); } relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, id, alias, null, equals ); } }
public AuditQuery addOrder(AuditOrder order) { hasOrder = true; AuditOrder.OrderData orderData = order.getData( enversService ); String orderEntityAlias = orderData.getAlias( REFERENCED_ENTITY_ALIAS ); String orderEntityName = aliasToEntityNameMap.get( orderEntityAlias ); String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, orderEntityName, orderData.getPropertyName() ); qb.addOrder( orderEntityAlias, propertyName, orderData.isAscending() ); return this; }
@Override public void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, Map<String, String> aliasToEntityNameMap, String baseAlias, QueryBuilder qb, Parameters parameters) { String effectiveAlias = alias == null ? baseAlias : alias; String effectiveOtherAlias = otherAlias == null ? baseAlias : otherAlias; String entityName = aliasToEntityNameMap.get( effectiveAlias ); String otherEntityName = aliasToEntityNameMap.get( effectiveOtherAlias ); String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); CriteriaTools.checkPropertyNotARelation( enversService, entityName, propertyName ); /* * Check that the other property name is not a relation. However, we can only * do this for audited entities. If the other property belongs to a non-audited * entity, we have to skip this check. */ if ( enversService.getEntitiesConfigurations().isVersioned( otherEntityName ) ) { CriteriaTools.checkPropertyNotARelation( enversService, otherEntityName, otherPropertyName ); } parameters.addWhere( effectiveAlias, propertyName, op, effectiveOtherAlias, otherPropertyName ); } }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName ); if ( relatedEntity == null ) { parameters.addNotNullRestriction( alias, propertyName ); } else { relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, null, alias, null, false ); } } }
public AuditQuery addProjection(AuditProjection projection) { AuditProjection.ProjectionData projectionData = projection.getData( enversService ); String projectionEntityAlias = projectionData.getAlias( REFERENCED_ENTITY_ALIAS ); String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); registerProjection( projectionEntityName, projection ); String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, projectionEntityName, projectionData.getPropertyName() ); qb.addProjection( projectionData.getFunction(), projectionEntityAlias, propertyName, projectionData.isDistinct() ); return this; }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); CriteriaTools.checkPropertyNotARelation( enversService, entityName, propertyName ); Parameters subParams = parameters.addSubParameters( Parameters.AND ); subParams.addWhereWithParam( alias, propertyName, ">=", lo ); subParams.addWhereWithParam( alias, propertyName, "<=", hi ); } }
@Override protected void addToQuery( EnversService enversService, AuditReaderImplementor versionsReader, String entityName, String alias, QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, entityName, propertyNameGetter ); RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName ); if ( relatedEntity == null ) { throw new AuditException( "The criterion can only be used on a property that is a relation to another property." ); } // todo: should this throw an error if qpdList is null? is it possible? List<QueryParameterData> qpdList = relatedEntity.getIdMapper().mapToQueryParametersFromId( propertyName ); if ( qpdList != null ) { QueryParameterData qpd = qpdList.iterator().next(); parameters.addWhereWithParams( alias, qpd.getQueryParameterName(), "in (", ids, ")" ); } } }
@Override public AuditAssociationQueryImpl<Q> addProjection(AuditProjection projection) { AuditProjection.ProjectionData projectionData = projection.getData( enversService ); String projectionEntityAlias = projectionData.getAlias( alias ); String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); String propertyName = CriteriaTools.determinePropertyName( enversService, auditReader, projectionEntityName, projectionData.getPropertyName() ); queryBuilder.addProjection( projectionData.getFunction(), projectionEntityAlias, propertyName, projectionData.isDistinct() ); registerProjection( projectionEntityName, projection ); return this; }
String effectiveAlias = this.alias == null ? baseAlias : this.alias; String entityName = aliasToEntityNameMap.get( effectiveAlias ); String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, ); CriteriaTools.checkPropertyNotARelation( enversService, entityName, propertyName );
QueryBuilder qb, Parameters parameters) { String propertyName = CriteriaTools.determinePropertyName( enversService, versionsReader, ); RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName );
public static String determinePropertyName( AuditReaderImplementor versionsReader, String entityName, PropertyNameGetter propertyNameGetter) { final AuditService auditService = versionsReader.getAuditService(); return determinePropertyName( versionsReader, entityName, propertyNameGetter.get( auditService ) ); }