0

简而言之,我有两个类 Person 和 Attribut:

@Entity
@Indexed
@Table(name="persons")
public class Person {

  private int id;
  private List<Attribute> attributes;

  @Id
  @DocumentId
  @GeneratedValue
  @Column(name="person_id")
  public int getId() {
   return id;
  }

  @ManyToMany
  @JoinTable(
    name="attribute_alloc",
    joinColumns={@JoinColumn(name="person_id")},
    inverseJoinColumns={@JoinColumn(name="attribute_id")}
    )
  @Audited
  public List<Attribute> getAttributes() {
   return attributes;
  }

  // other properties, setters and getters...
}


@Entity
@Indexed
@Table(name="attributes")
public class Attribute {

  private int id;
  private List<Person> persons;

  @Id
  @DocumentId
  @GeneratedValue
  @Column(name="attribute_id")
  public int getId() {
   return id;
  }

  @ManyToMany(mappedBy="attributes")
  public List<Attribute> getPersons() {
   return persons;
  }

  // other properties, setters and getters...
}

对于这些类,正确生成了数据库表 people、attributes、attribute_alloc、persons_aud、attributes_aud 和 attribute_alloc_aud。

除了对 Person 中的属性进行审计外,一切都运行良好。在表attribute_alloc_aud 中,更改(例如删除一个属性并向一个人添加一个新属性)被正确跟踪,但总是用REVTYPE ADD 标记。例如:

  • 转;人名;属性ID;REVTYPE
  • 1个;1个;1个;0
  • 1个;1个;2;0
  • 2;1个;1个;0
  • 2;1个;5个;0
  • 3;1个;8个;0

结果是上一次修订中的被审计人具有属性 1、2、5 和 8。正确的只有 8!

怎么了?非常感谢!最好的祝福

列维

4

1 回答 1

0

这可能是当您在 ManyToMany 中更新集合时,您可能正在清除集合然后添加新集合。

于 2010-07-30T15:43:36.577 回答