从休眠审计历史中选择一个字段
Posted
技术标签:
【中文标题】从休眠审计历史中选择一个字段【英文标题】:Select One field from hibernate audit history 【发布时间】:2018-06-27 11:59:08 【问题描述】:我只想从休眠审计中获取一个字段(实体的 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)
【问题讨论】:
想要获取 Contact.class 的字段,即 Contact.ID 【参考方案1】:您可以通过为查询设置投影来查询不同的数据子集:
query.addProjection(AuditEntity.id);
当您这样做并调用 getResultList 时,结果列表将包含 ID 列表而不是实体列表。
【讨论】:
我想获取 Contact.class 的字段,即 Contact.ID以上是关于从休眠审计历史中选择一个字段的主要内容,如果未能解决你的问题,请参考以下文章