Ответ 1
Использовать NotAudited в полях, когда вы вообще не хотите, чтобы значение/отношение проверялось. Я считаю, что вы можете использовать это на поле с такими отношениями, как OneToMany, ManyToMany или просто Column или без них. Используйте RelationTargetAuditMode.NOT_AUDITED в поле отношений, если вы хотите, чтобы значение проверялось, но не сущность с другой стороны отношения. Например, вы хотите проверить идентификатор/значение ключа, но не соответствующую таблицу.
Вы также можете применить RelationTargetAuditMode ко всему классу, который, я считаю, просто говорит, что для всех отношений в классе не выполняется аудит другого конца. Это смутило меня, поскольку я ошибочно использовал эту аннотацию, чтобы иметь в виду не проверять сущность ниже, что не значит, что это значит. Просто не выполняйте аннотацию аудита в классе сущности вообще, если вы не хотите, чтобы сущность проверялась. В других проверенных сущностях, которые относятся к сущности, вам придется либо использовать NotAudited, либо RelationTargetAuditMode.NOT_AUDITED для поля отношений.
Официальная документация не очень хороша в этой теме (http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch15.html) и даже не упоминает NotAudited.
В моих прошлых проектах мне нужно было провести аудит очень определенного набора таблиц, а не других, поэтому мне нужно было использовать эти аннотации. У меня есть отношения с внешним ключом для некоторых из моих неаудированных объектов от некоторых проверяемых объектов. Я часто использую аннотацию RelationTargetAuditMode.NOT_AUDITED, так что, по крайней мере, я проверяю значение/идентификатор внешнего ключа, а не сущность на другом конце отношения. Если у вас нет этой аннотации, вы получите исключение во время выполнения, когда ENVERS пытается вставить запись аудита в таблицу аудита для неаудированного объекта, и эта таблица не будет существовать. Я использую аннотацию NotAudited для нескольких взаимосвязей таблиц ManyToMany, которые мне просто не нужно проверять, и нет ничего в самой таблице проверенной сущности для записи (без идентификатора/значения внешнего ключа).
О да - документы не говорят, что происходит, если вы используете оба (не уверенный, какой из них имеет приоритет), но я не думаю, что использование обоих одновременно в данном поле предназначено. Используйте один или другой.