上Envers @OneToMany审计CREATE(0)但不是在DELETE(2)(Envers

2019-09-30 18:14发布

我看了不少类似的问题,如: http://community.jboss.org/message/580407#580407 ,但还没有找到一个解决办法。

一个活动有许多OCCURENCES,当发生难度创建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;

....

}

Hibernate属性:

<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" />

任何帮助将非常感激。

很奇怪的是,更新工作,但删除没有。

让我知道如果我可以提供任何更多的信息。

Answer 1:

在这里挖了一个旧的,但我想知道答案,但仅仅是因为我遇到了同样的问题,这个周末。

你在做什么:

Activity.getActivityOccurrenceList().remove(OCCURRENCE);

或者你在干什么:

Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);

首先应该给你2 REVTYPE,而第二个选项将可能给你0 REVTYPE。

当然,我可能是错的,因为我的例子是多对多,并有一个连接表,但我的修修补补,这是我怎么想它的工作。

在我的情况,但使用你的榜样; 弹簧招标活动出现的列表中,春季创建一个新的列表中的每个时间这样做,致使0(ADD),即使我去掉实际发生的REVTYPE。

你最终找到一个解决这个自己? 如果是这样你可以分享?



文章来源: Envers @OneToMany audit on CREATE(0) but not on DELETE(2)