Hibernate Envers@OneToMany在创建(0)时审核,但在删除(2)时审核

Hibernate Envers@OneToMany在创建(0)时审核,但在删除(2)时审核,hibernate,audit,hibernate-envers,Hibernate,Audit,Hibernate Envers,我已经研究了很多类似的问题,比如:但是还没有找到解决方案 一个活动有多个事件,创建事件时,活动\u事件\u AUD表将正确更新为0(创建)修订版 但是,当删除某个事件时,“活动”\u“事件”\u AUD表中不会填充2(删除)修订 活动实体: @Entity @Table(name = "activity") @Audited public class Activity implements Serializable { private static final long serialVe

我已经研究了很多类似的问题,比如:但是还没有找到解决方案

一个活动有多个事件,创建事件时,活动\u事件\u AUD表将正确更新为0(创建)修订版

但是,当删除某个事件时,“活动”\u“事件”\u 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;

....

}
@实体
@表(name=“活动”)
@审计
公共类活动实现可序列化{
私有静态最终长serialVersionUID=1L;
公共静态final int[]有效_优先级={0,1,2,3};
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@基本(可选=假)
@列(name=“id”,nullable=false)
私人长id;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“活动”)
私人列表活动发生列表;
....
}
活动发生实体:
@实体
@表(name=“活动\事件”)
@审计
公共类ActivityOccurse实现了可比较、可序列化的{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@基本(可选=假)
@列(name=“id”,nullable=false)
私人长id;
@JoinColumn(name=“activity\u id”,referencedColumnName=“id”,nullable=false)
@多通(可选=假)
私人活动;
....
}
休眠属性:

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

任何帮助都将不胜感激

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


如果我能提供更多的信息,请告诉我。

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

你在做什么

Activity.getActivityOccurrenceList().remove(OCCURRENCE);
Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);
或者你正在做:

Activity.getActivityOccurrenceList().remove(OCCURRENCE);
Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);
第一个选项应该为您提供2的REVTYPE,而第二个选项可能为您提供0的REVTYPE

当然,我可能是错的,因为我的示例有很多,并且有一个联接表,但从我的修补来看,这就是我认为它的工作原理

在我的情况下,但用你的例子;spring正在等待活动事件列表,每次spring都会创建一个新的列表来执行此操作,结果是REVTYPE为0(ADD),即使我实际上删除了一个事件


你自己最终找到解决办法了吗?如果有的话,你能和我分享一下吗?

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

你在做什么

Activity.getActivityOccurrenceList().remove(OCCURRENCE);
Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);
或者你正在做:

Activity.getActivityOccurrenceList().remove(OCCURRENCE);
Activity.setActivityOccurrenceList(NEW_LIST_EXLUDING_REMOVED_OCCURRENCE);
第一个选项应该为您提供2的REVTYPE,而第二个选项可能为您提供0的REVTYPE

当然,我可能是错的,因为我的示例有很多,并且有一个联接表,但从我的修补来看,这就是我认为它的工作原理

在我的情况下,但用你的例子;spring正在等待活动事件列表,每次spring都会创建一个新的列表来执行此操作,结果是REVTYPE为0(ADD),即使我实际上删除了一个事件

你自己最终找到解决办法了吗?如果有的话,你能分享吗