2014-08-28 5 views
0

최대 절전 모드 Envers (4.1.9.Final) 사용. 엔티티가 특정 유형으로 변경되고 특정 기준과 일치하는 모든 개정 (날짜, 개정 번호)을 얻으려고합니다.Hibernate Envers는 조건에 대한 개정을 얻는다.

AuditReader auditReader = AuditReaderFactory.get(entityManager); 
    AuditQuery query = auditReader.createQuery() 
      .forRevisionsOfEntity(InventoryItem.class, false, true) 
      .add(AuditEntity.property("section_uuid").eq(sectionUuid)) 
      .addOrder(AuditEntity.revisionNumber().desc()); 
    List<Object[]> revisions = query.getResultList(); 
  1. 이 각각 하나 개의 요소가 InventoryItem을 변경 반환

    내가 현재 데 코드입니다. 그래서 두 개의 InventoryItem이 개정판에서 변경되면 두 가지 요소가 생깁니다. 나는 그것을 원하지 않습니다.
  2. 이것은 실제 InventoryItem을 반환합니다. 조금 무겁습니다. 나는 그것을 원하지 않습니다.

고유 한 수정본 모음 (날짜, 개정 번호)을 얻으려면 어떻게해야합니까?

답변

0

AuditQueryaddProjection 메서드가 있습니다. 개정 번호 및 날짜에 투영을 추가 할 수 있습니다.

+0

나는 네가 절대적으로 옳다고 생각한다. * projections *으로 약간 연주했지만 제대로 작동하지 않았습니다. 너무 늦었을 것입니다. 너무 피곤했습니다. 신선한 동기 부여 덕분에 꽤 빨리 일했기 때문입니다. –

1

Adam의 답변을 바탕으로 여기 구현 한 코드가 있습니다. 나는 그의 대답을 받아 들인 대답으로 표시 할 것이다. createdrevisionProperty 대응, java.util.Date로 개정일 :

  • Object[0] : 개정 번호
  • Object[1]int 같은 결과
    AuditReader auditReader = AuditReaderFactory.get(entityManager); 
    AuditQuery query = auditReader.createQuery() 
        .forRevisionsOfEntity(InventoryItem.class, false, true) 
        .addProjection(AuditEntity.revisionNumber().distinct()) 
        .addProjection(AuditEntity.revisionProperty("created")) 
        .add(AuditEntity.property("section_uuid").eq(sectionUuid)) 
        .addOrder(AuditEntity.revisionNumber().desc()); 
    

    , query.getResultList()Object[] 포함 Object[]의 콜렉션을 리턴