从休眠审核历史记录中选择一个字段

时间:2018-01-18 12:00:21

标签: java hibernate audit

我想从hibernate审计中只获取一个字段(实体的PK)。 下面的代码给了我整个实体而不是一个字段

AuditReader reader = AuditReaderFactory.get(entityManager);
List<Contact> contactList = reader.createQuery()
                            .forRevisionsOfEntity(Contact.class, true, true)
                            .add(AuditEntity.revisionProperty("timestamp").between(startDate, endDate))
                            .getResultList();

我也尝试过如下但它抛出空指针异常

AuditReader reader = AuditReaderFactory.get(entityManager);
List<Contact> contactList = reader.createQuery()
                            .forRevisionsOfEntity(Contact.class,"ID", true, true)
                            .add(AuditEntity.revisionProperty("timestamp").between(startDate, endDate))
                            .getResultList();

例外:

java.lang.NullPointerException
at org.hibernate.envers.query.criteria.CriteriaTools.checkPropertyNotARelation(CriteriaTools.java:41)
at org.hibernate.envers.query.criteria.BetweenAuditExpression.addToQuery(BetweenAuditExpression.java:48)
at org.hibernate.envers.query.impl.RevisionsOfEntityQuery.list(RevisionsOfEntityQuery.java:99)
at org.hibernate.envers.query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:110)
at com.unifyv4.ejb.service.subscription.SubsService.getupdatedAccountDetail(SubsService.java:4249)

1 个答案:

答案 0 :(得分:0)

您可以通过设置对查询的投影来查询不同的数据子集:

query.addProjection(AuditEntity.id);

当你这样做并调用getResultList时,结果列表将包含一个ID列表而不是一个实体列表。