Package org.hibernate.envers.internal.tools.query

Examples of org.hibernate.envers.internal.tools.query.QueryBuilder


     * (only non-deleted entities and associations)
     *     ee.revision_type != DEL AND
     *     e.revision_type != DEL AND
     *     f.revision_type != DEL
     */
    final QueryBuilder commonPart = commonQueryPart(
        referencedIdData,
        indexIdData,
        versionsMiddleEntityName,
        verEntCfg.getOriginalIdPropName()
    );
    final QueryBuilder validQuery = commonPart.deepCopy();
    final QueryBuilder removedQuery = commonPart.deepCopy();
    createValidDataRestrictions(
        globalCfg, auditStrategy, referencedIdData, versionsMiddleEntityName, validQuery,
        validQuery.getRootParameters(), true, componentData
    );
    createValidAndRemovedDataRestrictions(
View Full Code Here


  private QueryBuilder commonQueryPart(
      MiddleIdData referencedIdData, MiddleIdData indexIdData,
      String versionsMiddleEntityName, String originalIdPropertyName) {
    final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName;
    // SELECT new list(ee) FROM middleEntity ee
    final QueryBuilder qb = new QueryBuilder( versionsMiddleEntityName, MIDDLE_ENTITY_ALIAS );
    qb.addFrom( referencedIdData.getAuditEntityName(), REFERENCED_ENTITY_ALIAS );
    qb.addFrom( indexIdData.getAuditEntityName(), INDEX_ENTITY_ALIAS );
    qb.addProjection(
        "new list", MIDDLE_ENTITY_ALIAS + ", " + REFERENCED_ENTITY_ALIAS + ", " + INDEX_ENTITY_ALIAS,
        false, false
    );
    // WHERE
    final Parameters rootParameters = qb.getRootParameters();
    // ee.id_ref_ed = e.id_ref_ed
    referencedIdData.getPrefixedMapper().addIdsEqualToQuery(
        rootParameters, eeOriginalIdPropertyPath, referencedIdData.getOriginalMapper(),
        REFERENCED_ENTITY_ALIAS + "." + originalIdPropertyName
    );
View Full Code Here

    this.entityName = entityName;
    versionsEntityName = verCfg.getAuditEntCfg().getAuditEntityName(
        entityName
    );

    qb = new QueryBuilder( versionsEntityName, REFERENCED_ENTITY_ALIAS );
  }
View Full Code Here

    CriteriaTools.checkPropertyNotARelation( auditCfg, entityName, propertyName );

    // Make sure our conditions are ANDed together even if the parent Parameters have a different connective
    Parameters subParams = parameters.addSubParameters( Parameters.AND );
    // This will be the aggregated query, containing all the specified conditions
    QueryBuilder subQb = qb.newSubQueryBuilder();

    // Adding all specified conditions both to the main query, as well as to the
    // aggregated one.
    for ( AuditCriterion versionsCriteria : criterions ) {
      versionsCriteria.addToQuery( auditCfg, versionsReader, entityName, qb, subParams );
      versionsCriteria.addToQuery( auditCfg, versionsReader, entityName, subQb, subQb.getRootParameters() );
    }

    // Setting the desired projection of the aggregated query
    switch ( mode ) {
      case MIN:
        subQb.addProjection( "min", propertyName, false );
        break;
      case MAX:
        subQb.addProjection( "max", propertyName, false );
    }

    // Correlating subquery with the outer query by entity id. See JIRA HHH-7827.
    if ( correlate ) {
      final String originalIdPropertyName = auditCfg.getAuditEntCfg().getOriginalIdPropName();
      auditCfg.getEntCfg().get( entityName ).getIdMapper().addIdsEqualToQuery(
          subQb.getRootParameters(),
          subQb.getRootAlias() + "." + originalIdPropertyName,
          qb.getRootAlias() + "." + originalIdPropertyName
      );
    }

    // Adding the constrain on the result of the aggregated criteria
View Full Code Here

    this.entityName = entityName;
    versionsEntityName = verCfg.getAuditEntCfg().getAuditEntityName(
        entityName
    );

    qb = new QueryBuilder( versionsEntityName, REFERENCED_ENTITY_ALIAS );
  }
View Full Code Here

  @SuppressWarnings({"unchecked"})
  public void performCollectionChange(
      Session session, String entityName, String propertyName, AuditConfiguration auditCfg,
      PersistentCollectionChangeData persistentCollectionChangeData, Object revision) {
    final QueryBuilder qb = new QueryBuilder( persistentCollectionChangeData.getEntityName(), MIDDLE_ENTITY_ALIAS );

    final String originalIdPropName = auditCfg.getAuditEntCfg().getOriginalIdPropName();
    final Map<String, Object> originalId = (Map<String, Object>) persistentCollectionChangeData.getData().get(
        originalIdPropName
    );
    final String revisionFieldName = auditCfg.getAuditEntCfg().getRevisionFieldName();
    final String revisionTypePropName = auditCfg.getAuditEntCfg().getRevisionTypePropName();

    // Adding a parameter for each id component, except the rev number and type.
    for ( Map.Entry<String, Object> originalIdEntry : originalId.entrySet() ) {
      if ( !revisionFieldName.equals( originalIdEntry.getKey() ) && !revisionTypePropName.equals( originalIdEntry.getKey() ) ) {
        qb.getRootParameters().addWhereWithParam(
            originalIdPropName + "." + originalIdEntry.getKey(),
            true, "=", originalIdEntry.getValue()
        );
      }
    }

    final SessionFactoryImplementor sessionFactory = ((SessionImplementor) session).getFactory();
    final Type propertyType = sessionFactory.getEntityPersister( entityName ).getPropertyType( propertyName );
    if ( propertyType.isCollectionType() ) {
      CollectionType collectionPropertyType = (CollectionType) propertyType;
      // Handling collection of components.
      if ( collectionPropertyType.getElementType( sessionFactory ) instanceof ComponentType ) {
        // Adding restrictions to compare data outside of primary key.
        for ( Map.Entry<String, Object> dataEntry : persistentCollectionChangeData.getData().entrySet() ) {
          if ( !originalIdPropName.equals( dataEntry.getKey() ) ) {
            qb.getRootParameters().addWhereWithParam( dataEntry.getKey(), true, "=", dataEntry.getValue() );
          }
        }
      }
    }

    addEndRevisionNullRestriction( auditCfg, qb.getRootParameters() );

    final List<Object> l = qb.toQuery( session ).setLockOptions( LockOptions.UPGRADE ).list();

    // Update the last revision if one exists.
    // HHH-5967: with collections, the same element can be added and removed multiple times. So even if it's an
    // ADD, we may need to update the last revision.
    if ( l.size() > 0 ) {
View Full Code Here

TOP

Related Classes of org.hibernate.envers.internal.tools.query.QueryBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.