Hi Adam,

The relevant issues:
HHH-8908 : Envers: Column of Embedded missing in Audit Table
HHH-9194 : Revert HHH-8908 fix
HHH-9193 : Default audit behavior of a mapped-superclass is inconsistent when 
extended by an entity vs an embeddable

I created a pull request for reverting HHH-8908 
(https://github.com/hibernate/hibernate-orm/pull/742). The fix is reverted for 
HHH-9194 and I've re-purposed the testcases that were added to HHH-8908 for 
HHH-9193. I'm still a little fuzzy of the expectations of these tests, so 
please take a look at the pull request and let me know if anything needs to be 
changed.

I'm still unsure how on the ways to explicitly enable auditing for a 
mapped-superclass as a whole or particular fields/methods. Here are some 
guesses on how I think it should work. Assume the following uses 
AccessType.FIELD.

In the following, A.b.intValue should be audited; A.b.strValue should not be 
audited.

@Entity
@Audited
public class A{
    ...
    private B b;
    ...
}

@Embeddable
public class B extends AbstractB {
    private int intValue;
}

@MappedSuperclass
public class AbstractB {
    private String strValue;
}

In the following, both A.b.intValue and A.b.strValue should be audited:

@Entity
@Audited
@AuditOverride( name="b.strValue" )
public class A{
    ...
    private B b;
    ...
}

@Embeddable
public class B extends AbstractB {
    private int intValue;
}

@MappedSuperclass
public class AbstractB {
    private String strValue;
}

In the following, both A.b.intValue and A.b.strValue should be audited:

@Entity
@Audited
public class A{
    ...
    private B b;
    ...
}

@Embeddable
public class B extends AbstractB {
    private int intValue;
}

@MappedSuperclass
@Audited
public class AbstractB {
    private String strValue;
}

In the following, both A.b.intValue and A.b.strValue should be audited. 

@Entity
@Audited
public class A{
    ...
    private B b;
    ...
}

@Embeddable
@AuditOverride( class=AbstractB.class )
public class B extends AbstractB {
    private int intValue;
}

@MappedSuperclass
public class AbstractB {
    private String strValue;
}

What should be the outcome of the following? Should A.b.strValue still be 
audited even though A.b is explicitly not audited?

@Entity
@Audited
public class A{
    ...
    @NotAudited
    private B b;
    ...
}

@Embeddable
public class B extends AbstractB {
    private int intValue;
}

@MappedSuperclass
@Audited
public class AbstractB {
    private String strValue;
}

Please clarify or correct as necessary. At this point, I'm not sure which of 
the above cases work. Once the expected behavior is clarified, tests should be 
added to ensure that envers operates as expected. Jira issues should be added 
for cases that don't work.

Thanks,
Gail
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to