Включает аудит @OneToMany для CREATE (0), но не для DELETE (2) - PullRequest
1 голос
/ 21 января 2011

Я посмотрел довольно много похожих вопросов, таких как: http://community.jboss.org/message/580407#580407, но пока не нашел решения.

У действия есть много вхождений, когда создается событие, таблица Activity_occurence_AUD корректно обновляется с ревизией 0 (создание).

Однако, когда вхождение удалено, таблица activity_occurence_AUD не заполняется ревизией 2 (удаление).

Деятельность субъекта:

@Entity
@Table(name = "activity")
@Audited
public class Activity implements Serializable {
    private static final long serialVersionUID = 1L;

    public static final int[] VALID_PRIORITIES = { 0, 1, 2, 3 };

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "activity")
    private List<ActivityOccurrence> activityOccurrenceList;

....

}

ActivityOccurence Entity:

@Entity
@Table(name = "activity_occurrence")
@Audited    
public class ActivityOccurrence implements Comparable<ActivityOccurrence>, Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Long id;

    @JoinColumn(name = "activity_id", referencedColumnName = "id", nullable = false)
    @ManyToOne(optional = false)
    private Activity activity;

....

}

Спящие свойства:

<entry key="hibernate.ejb.event.post-insert"     
  value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
<entry key="hibernate.ejb.event.post-update"
  value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
<entry key="hibernate.ejb.event.post-delete"
  value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
<entry key="hibernate.ejb.event.pre-collection-update"
  value="org.hibernate.envers.event.AuditEventListener" />
<entry key="hibernate.ejb.event.pre-collection-remove"
  value="org.hibernate.envers.event.AuditEventListener" />
<entry key="hibernate.ejb.event.post-collection-recreate" 
  value="org.hibernate.envers.event.AuditEventListener" />

Любая помощь будет высоко ценится.

Странно, что обновление работает, а удаление - нет.

Дайте мне знать, могу ли я предоставить больше информации.

1 Ответ

1 голос
/ 12 декабря 2011

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

Вы делаете:

Activity.getActivityOccurrenceList().remove(OCCURRENCE);

Или ты делаешь:

Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);

Первый должен дать вам REVTYPE, равный 2, тогда как второй вариант, вероятно, даст вам REVTYPE, равный 0.

Конечно, я могу ошибаться, потому что мой пример - ManyToMany, и у него есть таблица соединений, но, как я думаю, именно так я и думаю.

В моем случае, но по вашему примеру; Spring создает список событий в активности, и Spring каждый раз создает для этого новый список, в результате чего значение REVTYPE равно 0 (ADD), хотя я фактически удалил вхождение.

Вы в конце концов нашли решение для этого самостоятельно? Если так, не могли бы вы поделиться?

...