Skip to content
This repository has been archived by the owner on Mar 7, 2022. It is now read-only.

apply HanseMerkur patch #1

Open
wants to merge 1 commit into
base: 5.3.20.HMx
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle/base-information.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
apply plugin: 'base'

ext {
ormVersion = new HibernateVersion( '5.3.20.Final', project )
ormVersion = new HibernateVersion( '5.3.20.HM1', project )
baselineJavaVersion = '1.8'
jpaVersion = new JpaVersion('2.2')
}
Expand Down
1 change: 1 addition & 0 deletions hibernate-envers/hibernate-envers.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

apply from: rootProject.file( 'gradle/published-java-module.gradle' )
apply plugin: 'hibernate-matrix-testing'
apply plugin: 'maven'

description = 'Hibernate\'s entity version (audit/history) support'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,15 @@ public interface EnversSettings {
* Exactly one row with {@code null} end date exists for each identifier.
*/
String ALLOW_IDENTIFIER_REUSE = "org.hibernate.envers.allow_identifier_reuse";


/**
* Indicates if the audit table includes a column holding the revision type
*/
String REVISION_TYPE_IN_AUDIT_TABLE = "org.hibernate.envers.revision_type_in_audit_table";

/**
* Indicates if envers is using a global revision id or separate ids for each table
*/
String USE_GLOBAL_REVISION_ID = "org.hibernate.envers.use_global_revision_id";
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author Stephanie Pau at Markit Group Plc
* @author Chris Cranford
*/
public class AuditEntitiesConfiguration {
public class AuditEntitiesConfiguration {
private final String auditTablePrefix;
private final String auditTableSuffix;

Expand All @@ -48,6 +48,11 @@ public class AuditEntitiesConfiguration {
private final String embeddableSetOrdinalPropertyName;
private final EnversService enversService;

// Is the revision type part of the audit table
private final boolean revisionTypeInAuditTable;
// Is the AuditStrategy using a global revision id or one local to the entity
private final boolean useGlobalRevisionId;

public AuditEntitiesConfiguration(
Properties properties,
String revisionInfoEntityName,
Expand All @@ -60,6 +65,7 @@ public AuditEntitiesConfiguration(

auditStrategyName = ConfigurationHelper.getString(
EnversSettings.AUDIT_STRATEGY, properties, DefaultAuditStrategy.class.getName()

);

originalIdPropName = ConfigurationHelper.getString(
Expand Down Expand Up @@ -98,6 +104,18 @@ public AuditEntitiesConfiguration(
embeddableSetOrdinalPropertyName = ConfigurationHelper.getString(
EnversSettings.EMBEDDABLE_SET_ORDINAL_FIELD_NAME, properties, "SETORDINAL"
);

String revisionTypeInAuditTableStr = ConfigurationHelper.getString(
EnversSettings.REVISION_TYPE_IN_AUDIT_TABLE, properties,
"true"
);
revisionTypeInAuditTable = Boolean.parseBoolean( revisionTypeInAuditTableStr );

String useGlobalRevisionIdStr = ConfigurationHelper.getString(
EnversSettings.USE_GLOBAL_REVISION_ID, properties,
"true"
);
useGlobalRevisionId = Boolean.parseBoolean( useGlobalRevisionIdStr );
}

public String getOriginalIdPropName() {
Expand Down Expand Up @@ -178,4 +196,12 @@ public String getEmbeddableSetOrdinalPropertyName() {
public EnversService getEnversService() {
return enversService;
}

public boolean isUseGlobalRevisionId() {
return useGlobalRevisionId;
}

public boolean isRevisionTypeInAuditTable() {
return revisionTypeInAuditTable;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData;
import org.hibernate.envers.internal.reader.AuditReaderImplementor;
import org.hibernate.envers.internal.tools.query.QueryBuilder;
import org.hibernate.envers.query.internal.impl.SpecialRevisionRestrictionProvider;
import org.hibernate.envers.strategy.AuditStrategy;
import org.hibernate.query.Query;

import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER;
Expand All @@ -30,14 +32,17 @@ public abstract class AbstractRelationQueryGenerator implements RelationQueryGen
protected final AuditEntitiesConfiguration verEntCfg;
protected final MiddleIdData referencingIdData;
protected final boolean revisionTypeInId;
protected final AuditStrategy auditStrategy;

protected AbstractRelationQueryGenerator(
AuditStrategy auditStrategy,
AuditEntitiesConfiguration verEntCfg,
MiddleIdData referencingIdData,
boolean revisionTypeInId) {
this.verEntCfg = verEntCfg;
this.referencingIdData = referencingIdData;
this.revisionTypeInId = revisionTypeInId;
this.auditStrategy = auditStrategy;
}

/**
Expand All @@ -54,14 +59,18 @@ protected AbstractRelationQueryGenerator(

@Override
public Query getQuery(AuditReaderImplementor versionsReader, Object primaryKey, Number revision, boolean removed) {
final Query query = versionsReader.getSession().createQuery( removed ? getQueryRemovedString() : getQueryString() );
query.setParameter( DEL_REVISION_TYPE_PARAMETER, RevisionType.DEL );
query.setParameter( REVISION_PARAMETER, revision );
Query query = versionsReader.getSession().createQuery( removed ? getQueryRemovedString() : getQueryString() );
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
query.setParameter( DEL_REVISION_TYPE_PARAMETER, RevisionType.DEL );
query.setParameter( REVISION_PARAMETER, revision );
}
for ( QueryParameterData paramData : referencingIdData.getPrefixedMapper().mapToQueryParametersFromId(
primaryKey
) ) {
primaryKey ) ) {
paramData.setParameterValue( query );
}
if ( auditStrategy instanceof SpecialRevisionRestrictionProvider ) {
( (SpecialRevisionRestrictionProvider) auditStrategy ).setRevisionRestrictionParameter( query );
}
return query;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData;
import org.hibernate.envers.internal.tools.query.Parameters;
import org.hibernate.envers.internal.tools.query.QueryBuilder;
import org.hibernate.envers.query.internal.impl.SpecialRevisionRestrictionProvider;
import org.hibernate.envers.strategy.AuditStrategy;

import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER;
Expand Down Expand Up @@ -43,7 +44,7 @@ public OneAuditEntityQueryGenerator(
boolean revisionTypeInId,
String mappedBy,
boolean mappedByKey) {
super( verEntCfg, referencingIdData, revisionTypeInId );
super( auditStrategy, verEntCfg, referencingIdData, revisionTypeInId );

this.mappedBy = mappedBy;

Expand Down Expand Up @@ -124,7 +125,9 @@ private void createValidDataRestrictions(
true
);
// e.revision_type != DEL
rootParameters.addWhereWithNamedParam( getRevisionTypePath(), false, "!=", DEL_REVISION_TYPE_PARAMETER );
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
rootParameters.addWhereWithNamedParam( getRevisionTypePath(), false, "!=", DEL_REVISION_TYPE_PARAMETER );
}
}

/**
Expand All @@ -140,10 +143,17 @@ private void createValidAndRemovedDataRestrictions(
final Parameters removed = disjoint.addSubParameters( "and" );
// Excluding current revision, because we need to match data valid at the previous one.
createValidDataRestrictions( globalCfg, auditStrategy, referencedIdData, remQb, valid );
// e.revision = :revision
removed.addWhereWithNamedParam( verEntCfg.getRevisionNumberPath(), false, "=", REVISION_PARAMETER );
// e.revision_type = DEL
removed.addWhereWithNamedParam( getRevisionTypePath(), false, "=", DEL_REVISION_TYPE_PARAMETER );
if ( verEntCfg.isUseGlobalRevisionId() ) {
// e.revision = :revision
removed.addWhereWithNamedParam( verEntCfg.getRevisionNumberPath(), false, "=", REVISION_PARAMETER );
}
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
// e.revision_type = DEL
removed.addWhereWithNamedParam( getRevisionTypePath(), false, "=", DEL_REVISION_TYPE_PARAMETER );
}
if ( auditStrategy instanceof SpecialRevisionRestrictionProvider ) {
( (SpecialRevisionRestrictionProvider) auditStrategy ).setRevisionRestrictionParameter( null, valid );
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData;
import org.hibernate.envers.internal.tools.query.Parameters;
import org.hibernate.envers.internal.tools.query.QueryBuilder;
import org.hibernate.envers.query.internal.impl.SpecialRevisionRestrictionProvider;
import org.hibernate.envers.strategy.AuditStrategy;

import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER;
Expand All @@ -31,7 +32,7 @@ public OneEntityQueryGenerator(
AuditEntitiesConfiguration verEntCfg, AuditStrategy auditStrategy,
String versionsMiddleEntityName, MiddleIdData referencingIdData,
boolean revisionTypeInId, MiddleComponentData... componentData) {
super( verEntCfg, referencingIdData, revisionTypeInId );
super( auditStrategy, verEntCfg, referencingIdData, revisionTypeInId );

/*
* The valid query that we need to create:
Expand Down Expand Up @@ -99,7 +100,9 @@ private void createValidDataRestrictions(
originalIdPropertyName, MIDDLE_ENTITY_ALIAS, inclusive, componentData
);
// ee.revision_type != DEL
rootParameters.addWhereWithNamedParam( getRevisionTypePath(), "!=", DEL_REVISION_TYPE_PARAMETER );
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
rootParameters.addWhereWithNamedParam( getRevisionTypePath(), "!=", DEL_REVISION_TYPE_PARAMETER );
}
}

/**
Expand All @@ -116,9 +119,17 @@ private void createValidAndRemovedDataRestrictions(
// Excluding current revision, because we need to match data valid at the previous one.
createValidDataRestrictions( auditStrategy, versionsMiddleEntityName, remQb, valid, false, componentData );
// ee.revision = :revision
removed.addWhereWithNamedParam( verEntCfg.getRevisionNumberPath(), "=", REVISION_PARAMETER );
if ( verEntCfg.isUseGlobalRevisionId() ) {
removed.addWhereWithNamedParam( verEntCfg.getRevisionNumberPath(), "=", REVISION_PARAMETER );
removed.addWhereWithNamedParam( verEntCfg.getRevisionNumberPath(), "=", verEntCfg.getRevisionFieldName() );
}
// ee.revision_type = DEL
removed.addWhereWithNamedParam( getRevisionTypePath(), "=", DEL_REVISION_TYPE_PARAMETER );
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
removed.addWhereWithNamedParam( getRevisionTypePath(), "=", DEL_REVISION_TYPE_PARAMETER );
}
if ( auditStrategy instanceof SpecialRevisionRestrictionProvider ) {
( (SpecialRevisionRestrictionProvider) auditStrategy ).setRevisionRestrictionParameter( null, valid );
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.hibernate.envers.configuration.internal.GlobalConfiguration;
import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData;
import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData;
import org.hibernate.envers.query.internal.impl.SpecialRevisionRestrictionProvider;
import org.hibernate.envers.internal.tools.query.Parameters;
import org.hibernate.envers.internal.tools.query.QueryBuilder;
import org.hibernate.envers.strategy.AuditStrategy;
Expand Down Expand Up @@ -38,7 +39,7 @@ public ThreeEntityQueryGenerator(
MiddleIdData referencingIdData, MiddleIdData referencedIdData,
MiddleIdData indexIdData, boolean revisionTypeInId,
MiddleComponentData... componentData) {
super( verEntCfg, referencingIdData, revisionTypeInId );
super( auditStrategy, verEntCfg, referencingIdData, revisionTypeInId );

/*
* The valid query that we need to create:
Expand Down Expand Up @@ -188,22 +189,24 @@ private void createValidDataRestrictions(
referencingIdData, versionsMiddleEntityName, eeOriginalIdPropertyPath, revisionPropertyPath,
originalIdPropertyName, MIDDLE_ENTITY_ALIAS, inclusive, componentData
);
// ee.revision_type != DEL
rootParameters.addWhereWithNamedParam( revisionTypePropName, "!=", DEL_REVISION_TYPE_PARAMETER );
// e.revision_type != DEL
rootParameters.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"!=",
DEL_REVISION_TYPE_PARAMETER
);
// f.revision_type != DEL
rootParameters.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"!=",
DEL_REVISION_TYPE_PARAMETER
);
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
// ee.revision_type != DEL
rootParameters.addWhereWithNamedParam( revisionTypePropName, "!=", DEL_REVISION_TYPE_PARAMETER );
// e.revision_type != DEL
rootParameters.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"!=",
DEL_REVISION_TYPE_PARAMETER
);
// f.revision_type != DEL
rootParameters.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"!=",
DEL_REVISION_TYPE_PARAMETER
);
}
}

/**
Expand All @@ -224,38 +227,52 @@ private void createValidAndRemovedDataRestrictions(
createValidDataRestrictions(
globalCfg, auditStrategy, referencedIdData, versionsMiddleEntityName, remQb, valid, false, indexIdData, componentData
);
// ee.revision = :revision
removed.addWhereWithNamedParam( revisionPropertyPath, "=", REVISION_PARAMETER );
// e.revision = :revision
removed.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath,
false,
"=",
REVISION_PARAMETER
);
// f.revision = :revision
removed.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionPropertyPath,
false,
"=",
REVISION_PARAMETER
);
// ee.revision_type = DEL
removed.addWhereWithNamedParam( revisionTypePropName, "=", DEL_REVISION_TYPE_PARAMETER );
// e.revision_type = DEL
removed.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"=",
DEL_REVISION_TYPE_PARAMETER
);
// f.revision_type = DEL
removed.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"=",
DEL_REVISION_TYPE_PARAMETER
);
if ( verEntCfg.isUseGlobalRevisionId() ) {
// ee.revision = :revision
removed.addWhereWithNamedParam( revisionPropertyPath, "=", REVISION_PARAMETER );
// e.revision = :revision
removed.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath,
false,
"=",
REVISION_PARAMETER
);
// f.revision = :revision
removed.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionPropertyPath,
false,
"=",
REVISION_PARAMETER
);
}
if ( verEntCfg.isRevisionTypeInAuditTable() ) {
// ee.revision_type = DEL
removed.addWhereWithNamedParam( revisionTypePropName, "=", DEL_REVISION_TYPE_PARAMETER );
// e.revision_type = DEL
removed.addWhereWithNamedParam(
REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"=",
DEL_REVISION_TYPE_PARAMETER
);
// f.revision_type = DEL
removed.addWhereWithNamedParam(
INDEX_ENTITY_ALIAS + "." + revisionTypePropName,
false,
"=",
DEL_REVISION_TYPE_PARAMETER
);
}
if ( auditStrategy instanceof SpecialRevisionRestrictionProvider ) {
( (SpecialRevisionRestrictionProvider) auditStrategy ).setRevisionRestrictionParameter(
REFERENCED_ENTITY_ALIAS,
valid
);
( (SpecialRevisionRestrictionProvider) auditStrategy ).setRevisionRestrictionParameter(
INDEX_ENTITY_ALIAS,
valid
);
}
}

@Override
Expand Down
Loading