2016-01-31 8 views
0

Скажем, у нас есть проверяемое лицо, такие как:Даты последнего измененного объекта в спящем Envers

@Entity 
@Audited 
public class Person { 

    @Id 
    private Long id; 

    private String name; 

} 

и после сохранения/обновления нескольких сот записей, мне нужно, чтобы получить последний модифицированный объект задан набором id s. Учитывая таблицу логики Envers, это было бы так просто, как:

SELECT MAX(R.REVTSTMP) FROM PERSON_AUD P JOIN REVINFO R ON P.REV = R.REV 
WHERE P.ID IN (12, 35, 143, 151, 165, 188, 234, 251); 

, но я не могу найти способ, чтобы получить эту информацию через JPA или Envers API. Обратите внимание, что я ищу способ «Энвера» для этого, пытаясь избежать собственного SQL (плюс таблицы аудита хранятся в отдельном каталоге от одного объекта).

+0

Теперь я извлекаю все сущности и вычисляю последнюю дату ревизии с потоком в списке, но он очень неэффективен, так как мне нужно загрузить все объекты. –

ответ

0

Вы можете сделать это через AuditQuery расширений:

Object[] results = (Object[]) AuditReaderFactory.get(entityManager) 
    .createQuery() 
    .forRevisionsOfEntity(YourEntity.class, false, false) 
    .add(AuditEntity.revisionNumber().in(idsList)) 
    .addOrder(AuditEntity.revisionNumber().desc()) 
    .setMaxResults(1)  
    .getSingleResult(); 

// Object[0] = YourEntity instance 
// Object[1] = The RevisionEntity instance 
// Object[2] = RevisionType enum value 

Мы в настоящее время не подвергать AuditEntity.revisionTimestamp() собственности аксессор, так что вы должны были бы получить значение непосредственно из экземпляра объекта в Object[1] пересмотра.

+0

Добавлен запрос на повышение JIRA: https://hibernate.atlassian.net/browse/HHH-11462 – Naros

 Смежные вопросы

  • Нет связанных вопросов^_^