Таблица аудита запросов Hibernate Envers с пользовательским запросом - PullRequest
0 голосов
/ 13 января 2020

Я использую Hibernate Envers для аудита объектов. Есть такая возможность получить все версии / ревизии сущности, например:

AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
                Soup.class, true, true);
        auditQuery.add(AuditEntity.property("id").eq(id));
        List<Soup> from = auditQuery.getResultList();

Но это занимает слишком много времени, потому что объединяет все таблицы (в этом примере rev, soup_aud, ингридиенты_aud). И мне нужны только значения из Soup_AUD.

Как выбрать значения из проверенной таблицы с помощью пользовательского запроса?

Суп. java:

@Entity
@Table(name = "SOUP")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Wither
@Audited
public class Soup {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
    @JoinColumn(name = "INGREDIENT_ID")
    private List<Ingredient> ingredients;

}

Ингредиент. java:

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Wither
@Audited
public class Ingredient {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

}

Ответы [ 2 ]

1 голос
/ 17 января 2020

Я подозреваю c причина, по которой происходит объединение, объясняется тем, что @OneToMany является стороной-владельцем отношений, а не обратной стороной. Если вы не можете изменить свои отображения, то, к сожалению, я не верю, что в настоящее время есть способ избежать объединения.

То, что я могу добавить для поддержки этого, будет

  • Расширить traverseRelation для RevisionsOfEntityQuery типов
  • Предоставить метод setFetchMode для AuditQuery который отражает его Criteria API-аналог.

Все это будет улучшением Envers; из которых взносы будут приветствоваться. Первый элемент уже имеет запрос функции, зарегистрированный как HHH-13817 . Я также зарегистрировал HHH-13818 для последнего.

0 голосов
/ 21 января 2020

Мое решение теперь является nativeQuery из репозитория JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...