2014-09-19 6 views
1

Я пытался регистрировать дополнительные пользовательские данные с изменениями, созданными Envers. Я смог сделать это с помощью RevisionEntity и RevisionListener, но я не могу получить данные, которые регистрируются. Я попытался следующий кодКак запросить RevisionEntity в hibernate envers

AuditQuery auditQuery = AuditReaderFactory 
      .get(factory.getCurrentSession()).createQuery() 
      .forRevisionsOfEntity(Currency.class, false, false) 
      .add(AuditEntity.id().eq("ENV_US")); 

    List<Object[]> l = auditQuery.getResultList(); 

Это возвратило список В массиве объекта первый элемент является ревизионная Во-вторых, из RevisionEntity и третий имеет RevisionType, но значения в объекте RevisionEntity все нуль.

Вот POJO для RevisionEntity

@Entity 
@Table(name = "REVINFO") 
@RevisionEntity(RevListener.class) 
public class ExampleRevEntity { 
@Id 
@GeneratedValue 
@RevisionNumber 
@Column(name = "REV") 
private int rev; 

@RevisionTimestamp 
@Column(name = "REVTSTMP") 
private long revtstmp; 

@Column(name = "USERID") 
private String userId; 

public String getUserId() { 
    return userId; 
} 

public void setUserId(String userId) { 
    this.userId = userId; 
} 

} 

Пожалуйста, дайте мне знать, если я делаю любую вещь неправильно.

ответ

0

Вы хотите запросить объект ревизии самостоятельно или получить проверенные объекты, включая объект ревизии?

Если вы хотите запросить сам объект ревизии, это абсолютно нормальный объект. Просто запросите его как все другие объекты - не через AuditQuery, а используя EntityManager или Session.

Если вы хотите получить проверенные объекты, включая объект ревизии, то приведенное выше верно, при условии, что существуют данные ревизии для ревизий, на которых был изменен объект. Вы видите данные в базе данных, соответствующие возвращенным версиям?

+0

Да, версии были созданы в базе данных, одна с revetype ADD, а другая для UPDATE. И в списке запросов также я получил правильные объекты revtype, но объекты RevisionEntity были все blanck (так как в UserId было null, а rev и revtstmp равно 0). –

+0

Понятия не имею, может быть ошибка, но трудно сказать без отладки. – adamw

1

Возможно, вам действительно понадобится использовать этот объект. Hibernate/Envers вернет ленивый инициализированный объект, и отладчики, вероятно, не смогут увидеть значения. Как только вы вызываете геттеры в коде, должны быть заполнены правильные значения.

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