I use hibernate envers for auditing. I have simple User entity:
@Entity
@Table(name = "user")
@Audited
@AuditTable(value = "userHistory")
public class User implements Serializable {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
private String username;
private String password;
@OneToMany(mappedBy="user")
private Collection<Test> tests;
//getter and setter
}
entity Test :
@Entity
@Table(name = "test")
@Audited
@AuditTable(value = "testHistory")
public class Test {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
private String description;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "useriduser")
private User user;
public Test() {
super();
}
//getter and setter
}
Log: org.hibernate.QueryException: could not resolve property: user of
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: user of: name.luoyong.hibernate.basic.entity.Test_AUD [select e__ from name.luoyong.hibernate.basic.entity.Test_AUD e__ where e__.user.id = :_p0 order by e__.originalId.REV.id asc]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:113)
at org.hibernate.envers.internal.tools.query.QueryBuilder.toQuery(QueryBuilder.java:323)
at org.hibernate.envers.query.internal.impl.AbstractAuditQuery.buildQuery(AbstractAuditQuery.java:98)
at org.hibernate.envers.query.internal.impl.AbstractAuditQuery.buildAndExecuteQuery(AbstractAuditQuery.java:104)
at org.hibernate.envers.query.internal.impl.RevisionsOfEntityQuery.getQueryResults(RevisionsOfEntityQuery.java:173)
at org.hibernate.envers.query.internal.impl.RevisionsOfEntityQuery.list(RevisionsOfEntityQuery.java:136)
at org.hibernate.envers.query.internal.impl.AbstractAuditQuery.getResultList(AbstractAuditQuery.java:112)
at name.luoyong.hibernate.envers.App.reader(App.java:65)
at name.luoyong.hibernate.envers.App.main(App.java:24)
Caused by: org.hibernate.QueryException: could not resolve property: user of: name.luoyong.hibernate.basic.entity.Test_AUD [select e__ from name.luoyong.hibernate.basic.entity.Test_AUD e__ where e__.user.id = :_p0 order by e__.originalId.REV.id asc]
I am trying to find all revisions with the following method. I use AuditorReader to query for revisions
AuditReader reader = AuditReaderFactory.get(entityManager);
AuditQuery auditQuery=reader.createQuery().forRevisionsOfEntity(Test.class, true, true);
auditQuery.add(AuditEntity.property("user.id").eq(1L)).getResultList().forEach(e->System.out.println(e.toString()));