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

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


  @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


     *
     *     AND
     * (only non-deleted entities)
     *     e.revision_type != DEL
     */
    final QueryBuilder commonPart = commonQueryPart( verEntCfg.getAuditEntityName( referencedEntityName ) );
    final QueryBuilder validQuery = commonPart.deepCopy();
    final QueryBuilder removedQuery = commonPart.deepCopy();
    createValidDataRestrictions(
        globalCfg, auditStrategy, referencedIdData, validQuery, validQuery.getRootParameters(), true
    );
    createValidAndRemovedDataRestrictions( globalCfg, auditStrategy, referencedIdData, removedQuery );

View Full Code Here

  /**
   * Compute common part for both queries.
   */
  private QueryBuilder commonQueryPart(String versionsReferencedEntityName) {
    // SELECT e FROM versionsEntity e
    final QueryBuilder qb = new QueryBuilder( versionsReferencedEntityName, REFERENCED_ENTITY_ALIAS );
    qb.addProjection( null, REFERENCED_ENTITY_ALIAS, false, false );
    // WHERE
    // e.id_ref_ed = :id_ref_ed
    referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( qb.getRootParameters(), null, true );
    return qb;
  }
View Full Code Here

     * (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

     *
     * (only non-deleted entities and associations)
     *     ee.revision_type != DEL AND
     *     e.revision_type != DEL
     */
    final QueryBuilder commonPart = commonQueryPart(
        referencedIdData,
        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, String versionsMiddleEntityName,
      String originalIdPropertyName) {
    final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName;
    // SELECT new list(ee) FROM middleEntity ee
    QueryBuilder qb = new QueryBuilder( versionsMiddleEntityName, MIDDLE_ENTITY_ALIAS );
    qb.addFrom( referencedIdData.getAuditEntityName(), REFERENCED_ENTITY_ALIAS );
    qb.addProjection( "new list", MIDDLE_ENTITY_ALIAS + ", " + REFERENCED_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

  @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

  @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

      String alias1,
      String alias2,
      boolean inclusive) {
    // create a subquery builder
    // SELECT max(e.revision) FROM versionsReferencedEntity e2
    QueryBuilder maxERevQb = rootQueryBuilder.newSubQueryBuilder( idData.getAuditEntityName(), alias2 );
    maxERevQb.addProjection( "max", revisionPropertyPath, false );
    // WHERE
    Parameters maxERevQbParameters = maxERevQb.getRootParameters();
    // e2.revision <= :revision
    maxERevQbParameters.addWhereWithNamedParam( revisionPropertyPath, inclusive ? "<=" : "<", REVISION_PARAMETER );
    // e2.id_ref_ed = e.id_ref_ed
    idData.getOriginalMapper().addIdsEqualToQuery(
        maxERevQbParameters,
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.