【问题标题】:Envers @OneToMany audit on CREATE(0) but not on DELETE(2)Envers @OneToMany 在 CREATE(0) 上审计,但在 DELETE(2) 上不审计
【发布时间】:2011-06-13 09:24:09
【问题描述】:

我看过很多类似的问题,例如: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" />

任何帮助将不胜感激。

奇怪的是更新有效但删除无效。

如果我可以提供更多信息,请告诉我。

【问题讨论】:

    标签: hibernate audit hibernate-envers


    【解决方案1】:

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

    你在做什么:

    Activity.getActivityOccurrenceList().remove(OCCURRENCE);
    

    或者你在做什么:

    Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);
    

    第一个选项的 REVTYPE 应该为 2,而第二个选项的 REVTYPE 可能为 0。

    当然我可能是错的,因为我的示例是 ManyToMany 并且有一个连接表,但根据我的修补,我认为它是这样工作的。

    在我的情况下,但使用你的例子; spring 正在投标活动发生的列表,并且 spring 每次都会创建一个新列表来执行此操作,即使我实际上删除了一个事件,也会导致 REVTYPE 为 0 (ADD)。

    您最终自己找到了解决方案吗?如果可以,可以分享一下吗?

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 2015-12-14
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多