@ManyToMany: REVTYPE только ДОБАВЛЯЕТ - PullRequest
0 голосов
/ 24 июля 2010

у меня есть два класса 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...
}

Для этих классов таблицы db person, attribute, attribute_alloc, Person_aud, attribute_aud и attribute_alloc_aud были сгенерированы правильно.

Все работает хорошо, кроме аудита для атрибутов в лице.В таблице attribute_alloc_aud изменения (например, удаление атрибута и добавление нового к человеку) отслеживаются правильно, но всегда помечаются REVTYPE ADD.Например:

  • REV;person_id;attribute_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!

Чтонеправильно?Большое спасибо!С наилучшими пожеланиями

Леви

1 Ответ

0 голосов
/ 30 июля 2010

Это может быть, вероятно, когда вы обновляете коллекцию в ManyToMany, вы можете очистить коллекцию и затем добавить новую коллекцию.

...