Hibernate Envers также проверяет сторону oneToMany, даже если она не имеет изменений - PullRequest
1 голос
/ 10 июня 2019

Есть две сущности Instrument и Definition.

Когда instrumentCode изменено Envers создает проверенную запись только для Instrument.

Я хочу, чтобы при изменении instrumentCode Envers создавал проверенные записи для сущностей Instrument и Definition. Как это можно сделать, и возможно ли это?

Я играл с @AuditedJoinTable, @AuditedMappedBy, но без везения.

@Audited
@Getter
@Entity
public class Instrument {

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

    @Column(name = "instrument_code")
    protected String instrumentCode;

    @ManyToOne(optional = false, fetch = FetchType.LAZY, targetEntity = Definition.class)
    @JoinColumn(name = "definition_id", nullable = false)
    private Definition definition;
}
//-----
@Audited
@Getter
@Entity
public class Definition {

    @Id
    @Column(nullable = false)
    protected String id;

    @OneToMany(mappedBy = "definition",
            orphanRemoval = true,
            cascade = CascadeType.ALL,
            targetEntity = Instrument.class)
    private Set<Instrument> instruments = Sets.newHashSet();
}

1 Ответ

1 голос
/ 12 июня 2019

Мне не известны какие-либо из готовых конфигураций для этой, которые уже доступны в данный момент (хотя кажется, что разрабатывается нечто подобное ).

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

Или вы можете ввести фиктивный столбец в родительской сущности и обновить егокогда дети меняются, как показано в этом ответе :

@Entity
public class A {
    private Date lastModified;

    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
    private List<B> blist;

    public void touch() {
        lastModified = new Date();
    }
}

public class B {
    @ManyToOne
    private A a; 

    @PreUpdate
    public void ensureParentUpdated() {
        if (a != null) {
            a.touch();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...