Package org.hibernate.envers.tools.query

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


         */
        String revisionPropertyPath = verEntCfg.getRevisionNumberPath();
        String originalIdPropertyName = verEntCfg.getOriginalIdPropName();

        // SELECT ee FROM middleEntity ee
        QueryBuilder qb = new QueryBuilder(versionsMiddleEntityName, "ee");
        qb.addProjection(null, "ee", false, false);
        // WHERE
        Parameters rootParameters = qb.getRootParameters();
        // ee.originalId.id_ref_ing = :id_ref_ing
        referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery(rootParameters, originalIdPropertyName, true);
       
        String eeOriginalIdPropertyPath = "ee." + originalIdPropertyName;

        // (with ee association at revision :revision)
        // --> based on auditStrategy (see above)
        auditStrategy.addAssociationAtRevisionRestriction(qb, revisionPropertyPath,
             verEntCfg.getRevisionEndFieldName(), true,referencingIdData, versionsMiddleEntityName,
             eeOriginalIdPropertyPath, revisionPropertyPath, originalIdPropertyName, componentDatas);
        
        // ee.revision_type != DEL
        rootParameters.addWhereWithNamedParam(verEntCfg.getRevisionTypePropName(), "!=", "delrevisiontype");

        StringBuilder sb = new StringBuilder();
        qb.build(sb, Collections.<String, Object>emptyMap());
        queryString = sb.toString();
    }
View Full Code Here


  public void addEntityAtRevisionRestriction(GlobalConfiguration globalCfg, QueryBuilder rootQueryBuilder, Parameters parameters,
      String revisionProperty, String revisionEndProperty, boolean addAlias, MiddleIdData idData, String revisionPropertyPath,
      String originalIdPropertyName, 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,
                alias1 + "." + originalIdPropertyName, alias2 +"." + originalIdPropertyName);
View Full Code Here

  public void addAssociationAtRevisionRestriction(QueryBuilder rootQueryBuilder, Parameters parameters, String revisionProperty,
            String revisionEndProperty, boolean addAlias, MiddleIdData referencingIdData, String versionsMiddleEntityName,
            String eeOriginalIdPropertyPath, String revisionPropertyPath, String originalIdPropertyName, String alias1,
        boolean inclusive, MiddleComponentData... componentDatas) {
    // SELECT max(ee2.revision) FROM middleEntity ee2
        QueryBuilder maxEeRevQb = rootQueryBuilder.newSubQueryBuilder(versionsMiddleEntityName, MIDDLE_ENTITY_ALIAS_DEF_AUD_STR);
        maxEeRevQb.addProjection("max", revisionPropertyPath, false);
        // WHERE
        Parameters maxEeRevQbParameters = maxEeRevQb.getRootParameters();
        // ee2.revision <= :revision
        maxEeRevQbParameters.addWhereWithNamedParam(revisionPropertyPath, inclusive ? "<=" : "<", REVISION_PARAMETER);
        // ee2.originalId.* = ee.originalId.*
        String ee2OriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS_DEF_AUD_STR + "." + originalIdPropertyName;
        referencingIdData.getPrefixedMapper().addIdsEqualToQuery(maxEeRevQbParameters, eeOriginalIdPropertyPath, ee2OriginalIdPropertyPath);
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

     *     AND
     *
     * (only non-deleted entities and associations)
     *     ee.revision_type != DEL
     */
    final QueryBuilder commonPart = commonQueryPart( versionsMiddleEntityName );
    final QueryBuilder validQuery = commonPart.deepCopy();
    final QueryBuilder removedQuery = commonPart.deepCopy();
    createValidDataRestrictions(
        auditStrategy, versionsMiddleEntityName, validQuery, validQuery.getRootParameters(), true, componentData
    );
    createValidAndRemovedDataRestrictions( auditStrategy, versionsMiddleEntityName, removedQuery, componentData );

View Full Code Here

  /**
   * Compute common part for both queries.
   */
  private QueryBuilder commonQueryPart(String versionsMiddleEntityName) {
    // SELECT ee FROM middleEntity ee
    final QueryBuilder qb = new QueryBuilder( versionsMiddleEntityName, MIDDLE_ENTITY_ALIAS );
    qb.addProjection( null, MIDDLE_ENTITY_ALIAS, false, false );
    // WHERE
    // ee.originalId.id_ref_ing = :id_ref_ing
    referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( qb.getRootParameters(), verEntCfg.getOriginalIdPropName(), true );
    return qb;
  }
View Full Code Here

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

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
    final QueryBuilder qb = new QueryBuilder( versionsMiddleEntityName, MIDDLE_ENTITY_ALIAS );
    qb.addFrom( referencedIdData.getEntityName(), 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
    );
    // ee.originalId.id_ref_ing = :id_ref_ing
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

TOP

Related Classes of org.hibernate.envers.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.