руководство по многоуровневому пересмотру сущностей - PullRequest
6 голосов
/ 27 января 2012

У пользователя n контактов. Контакт может иметь локализованный комментарий (комментарии распределяются между контактами). Java Beans:

@Audited
@Entity
public class User {
    @OneToMany(fetch = FetchType.EAGER,
               cascade = CascadeType.ALL,
               orphanRemoval = true)
    Set<Context> contacts;
}

@Audited
@Entity
public class Contact {
    @ManyToOne(fetch = FetchType.EAGER,
               cascade = {
                          CascadeType.MERGE,
                          CascadeType.PERSIST,
                          CascadeType.REFRESH})
    Comment comment;
}

@Audited
@Entity
public class Comment {
    String de;
    String en;
    String fr;
}

Если я изменю немецкую локализацию (Comment.de) контакта (Contact.comment), то это создаст новую ревизию, но не для Пользователя. Если я запрашиваю envers для пользовательских ревизий, я никогда не увижу это «изменение уровня 2», потому что отношение между пользователем и контактом не изменилось, изменилась только немецкая строка в комментарии к контакту.

Но я хочу видеть в истории пользователей новую запись (изменен немецкий комментарий для контакта XYZ).

Как я могу это сделать? : D

Thxs

1 Ответ

1 голос
/ 13 ноября 2012

Возможно, идея будет заключаться в том, чтобы использовать пользовательский журнал ревизий (http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch15.html#envers-revisionlog), в котором вы сохраняете «корневую» сущность / сущности, для которых изменение имеет значение. Это может быть не самым эффективным, но в зависимости от модели вашего домена, это может быть то, что вы хотите.

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