This criterion can only be used on a property that is a relation to another property.
vyacheslav86 Dec 7, 2011 3:10 AMI have org.hibernate.envers.exception.AuditException: This criterion can only be used on a property that is a relation to another property.
in the next code in the last try-catch block:
@Service
public class EntityRevisionServiceImpl implements EntityRevisionService {
@Resource
private PersistenceManagerHibernate persistenceManagerHibernate;
@Override
public Object get(Class<?> clazz, Long id, Date date) {
Session entityManager = persistenceManagerHibernate.getHibernateSession();
AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQueryCreator auditQueryCreator = auditReader.createQuery();
AuditQuery auditQuery = auditQueryCreator.forRevisionsOfEntity(clazz, false, true);
auditQuery = auditQuery.addProjection(AuditEntity.revisionNumber().min())
.add(
AuditEntity.revisionProperty("timestamp").maximize()
.add(AuditEntity.revisionProperty("timestamp").le(date))
.add(AuditEntity.id().eq(id))
)
;
List resultList = null;
try {
resultList = auditQuery.getResultList();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if (resultList.size() == 0) {
return null;
}
Object object = resultList.get(0);
if (object == null) {
return null;
}
Long revisionNumber = (Long) object;
AuditQuery query = auditReader.createQuery().forEntitiesAtRevision(clazz, revisionNumber)
.add(AuditEntity.id().eq(id));
try {
Object object2 = query.getSingleResult();
return object2;
} catch (Exception e) {
throw new RuntimeException(e);
}
The class i'm searching for is:
@Entity
@Audited(auditParents={Property.class})
public class Atm extends Property {
@Entity
@Table(name = "PROPERTIES")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="BASE_TYPE_ID", discriminatorType=DiscriminatorType.INTEGER)
@Audited
public class Property implements Auditable, Serializable {
private static final long serialVersionUID = -7827695648259800469L;
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
There is an entity with specified id in a database. There is a revision(it is found successfuly by first audit query;
AuditQuery auditQuery = auditQueryCreator.forRevisionsOfEntity(clazz, false, true);
auditQuery = auditQuery.addProjection(AuditEntity.revisionNumber().min())
.add(
AuditEntity.revisionProperty("timestamp").maximize()
.add(AuditEntity.revisionProperty("timestamp").le(date))
.add(AuditEntity.id().eq(id))
)
;
There is a revision of entity with found revisionNumber and specifies id in a database but i get an error.
For other entity without inheritance of audited entity the same query completes successfully:
@Entity
@Table(name = "CAPEX_CONTRACTS")
@Audited
public class CapexContract implements Auditable {
@Id
@NotNull
@GeneratedValue
@Column(name = "ID")
private Long id;