Using Hibernate Envers, while doing create operation audit functionality is properly working data is correctly filled up in main as well as audit table but while deleting an entry for few fields its taking null following is the code sample:
@Audited
@MappedSuperclass
public abstract class A implements Serializable
{
private static final long serialVersionUID = 1L;
@NotNull
private Long id;
@NotNull
private String user;
private Timestamp time;
}
@Entity
@Audited
public class B extends A
{
private static final long serialVersionUID = 1L;
@EmbeddedId
private EmbeddedId embeddedId;
@ManyToOne
@JoinColumn(name = "CODE")
private Code code;
}
@Audited
@Embeddable
public class EmbeddedId implements Serializable
{
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "C")
private C c;
@ManyToOne(optional = false)
@JoinColumns(value =
{ @JoinColumn(name = "C_ID", referencedColumnName = "C_ID"),
@JoinColumn(name = "D_ID", referencedColumnName = "D_ID") })
private D d;
}
@Entity
@Audited
public class Code extends A
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long cId;
private String name;
}
All the classes are annotated with @Audited, when delete operation is fired Class B data is not properly getting audited. Data corresponding to the embeddedId (composite primary key) is reflecting in audit table but other data like (code, id, user, time) i.e member variable of that class as well as coming from inheritance are going as null in audit table.
Please provide with the detailed solution for this issue as i am new to Envers.
If you want non-identifier attributes to be stored when you perform a DELETE
operation, you must explicitly tell Envers that you wish to enable this behavior because by default it doesn't do that.
Simply toggle the configuration org.hibernate.envers.store_data_at_delete
to true
and Envers will begin to capture and store the non-identifier audited attributes during the DELETE
database operation.
You set this configuration where you supply other hibernate configuration properties.
Just a minor addition: In our environment using spring boot and Hibernate - the following variable made the trick (since the one offered here dod not - but gave me the idea about how to address it):
spring.jpa.properties.org.hibernate.envers.store_data_at_delete=true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With