Hibernate Envers – как сопоставить пользовательские столбцы RevisionEntity с запросами аудитаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Hibernate Envers – как сопоставить пользовательские столбцы RevisionEntity с запросами аудита

Сообщение Anonymous »

Я разделил поддержку аудита и изменения в своем решении. Он работает нормально, но я понятия не имею, как создать запрос, чтобы получить все версии, в которых данные аудита сопоставляются из REVINFO с MyEntity в результате запроса. Например, объединение MYENTITY_AUD и REVINFO в REV для столбцов LastModified. Для созданных столбцов это еще сложнее, поскольку может потребоваться подзапрос с REVTYPE = 0.

Код: Выделить всё

private List allRevisions() {
AuditReaderFactory.get(entityManager).createQuery()
.forRevisionsOfEntity(MyEntity.class, true, true)
.addOrder(AuditEntity.revisionNumber().asc())
.getResultList();
}
Мои таблицы выглядят так:

Код: Выделить всё

MYENTITY table
+---------------------------------------------------------------------------+
| ID | MYDATA | CREATEDBY | CREATEDDATE | LASTMODIFIEDBY | LASTMODIFIEDDATE |
+---------------------------------------------------------------------------+

MYENTITY_AUD table
+-----------------------------+
| ID | REV | REVTYPE | MYDATA |
+-----------------------------+

REVINFO table
+-----------------------------+
| REV | REVTSTMP | MODIFIEDBY |
+-----------------------------+
Примеры из кода:

Код: Выделить всё

@Audited
@Entity
public class MyEntity {

private String myData;

@CreatedBy
@NotAudited
private String createBy;

@CreateDate
@NotAudited
private LocalDateTime createdDate;

@LastModifiedBy
@NotAudited
private String lastModifiedBy;

@LastModifiedDate
@NotAudited
private LocalDateTime lastModifiedDate;
}

Код: Выделить всё

@Entity
@Table(name = "REVINFO")
@RevisionEntity(MyRevisionListener.class)
public class MyRevisionEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@RevisionNumber
@Column(name = "REV")
private int id;

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

@Column(name = "MODIFIED_BY")
private String modifiedBy;
...
}

Код: Выделить всё

public class MyRevisionListener implements RevisionListener {

@Override
public void newRevision(Object revisionEntity) {
MyRevisionEntity revision = (MyRevisionEntity) revisionEntity;
revision.setModifiedBy(MyContext.getUserName())
}
}
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... it-queries
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Hibernate Envers: специальный RevisionEntity только для конкретной базы данных/схемы (настройка нескольких баз данных, н
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Hibernate Envers 5.6.15 отображение hbm ORM + аннотация envers
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Hibernate Envers 5.6.15 отображение hbm ORM + аннотация envers
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Hibernate Envers 5.6.15 отображение hbm ORM + аннотация envers
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Hibernate Envers 5.6.15 отображение hbm ORM + аннотация envers
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»