org.hibernate.envers.query.criteria.internal.PropertyAuditExpression Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-envers-jakarta Show documentation
Show all versions of hibernate-envers-jakarta Show documentation
Hibernate's entity version (audit/history) support Jakarta edition
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.envers.query.criteria.internal;
import java.util.Map;
import org.hibernate.envers.boot.internal.EnversService;
import org.hibernate.envers.internal.reader.AuditReaderImplementor;
import org.hibernate.envers.internal.tools.query.Parameters;
import org.hibernate.envers.internal.tools.query.QueryBuilder;
import org.hibernate.envers.query.criteria.AuditCriterion;
import org.hibernate.envers.query.internal.property.PropertyNameGetter;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class PropertyAuditExpression implements AuditCriterion {
private String alias;
private PropertyNameGetter propertyNameGetter;
private String otherAlias;
private String otherPropertyName;
private String op;
public PropertyAuditExpression(
String alias,
PropertyNameGetter propertyNameGetter,
String otherAlias,
String otherPropertyName,
String op
) {
this.alias = alias;
this.propertyNameGetter = propertyNameGetter;
this.otherAlias = otherAlias;
this.otherPropertyName = otherPropertyName;
this.op = op;
}
@Override
public void addToQuery(
EnversService enversService,
AuditReaderImplementor versionsReader,
Map 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 );
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy