2016-02-16 11 views
3

Я пытаюсь провести аудит объекта, но я не хочу проверять его отношения. Если я поставлю @Audited (targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) в отношениях @ManyToOne, это работает, и у меня нет никакого исключения, но когда я пытаюсь использовать ту же аннотацию в @onetomany с определенным параметром, у меня есть исключение, которое говорит мне, что я должен проверять другой объект.Hibernate envers: RelationTargetAuditMode.NOT_AUDITED vs @NotAudited

Пример:

@Table(name = "OWNERS") 
@Entity 
@EntityListeners(AuditingEntityListener.class) 
@Audited 
public class Owner { 
... 
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 
    @ManyToOne(fetch=FetchType.LAZY) 
    private User user; 
... 
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") 
    private Set<Pet> pets = new HashSet<Pet>(); 
... 
} 

ответ

0

Ну, я думаю, у вас есть два варианта здесь:

  1. Собственно AUDIT сущность Pet, если это применимо;

  2. Использовать аннотацию @NotAudited вместо @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED). Подумайте об этом, таблица аудита для Owner не должна содержать ассоциированную Pet. Если это так, используйте опцию 1.

Надеюсь, это поможет!

3

При использовании @Audited (targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) вы указываете, что спящий режим не должен проверять этот объект, а проверять отношение, чтобы вы спящий режим сохранял идентификатор ссылочного объекта. Вот почему Pet должен быть объектом @Audited.

Если вы не хотите, чтобы сохранить отношения на все, что вам нужно использовать @NotAudited

Проверить это Whats the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?