Javers только сохранить одну сторону отношений - PullRequest
0 голосов
/ 19 февраля 2020

Вот наши классы доменов

@Table(name="TAG")
public class Tag {

    @Id
    @Column(name = "uid")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID uid;

    @Column(name = "name")
    private String name;

    @ShallowReference
    @ManyToMany(mappedBy = "tags")
    private Set<Organization> organizations = new HashSet<>();

    public boolean associate(Organization organization){
        boolean b1 = organization.getTags().add(this);
        boolean b2 = organizations.add(organization);
        return b1 || b2;
    }

    public boolean disassociate(Organization organization){
        boolean b1 = organization.getTags().remove(this);
        boolean b2 = organizations.remove(organization);
        return b1 || b2;
    }
}
@Table(name="ORGANIZATION")
public class Organization {

    @Id
    @Column(name = "uid")
    @GeneratedValue(strategy = GenerationType.AUTO)

    @ShallowReference
    @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE}, fetch = FetchType.LAZY)
    @JoinTable(
            name = "ORGANIZATION_TAG",
            joinColumns = {@JoinColumn(name="organization_uid")},
            inverseJoinColumns = {@JoinColumn(name="tag_uid")}
    )
    private Set<Tag> tags = new HashSet<>();

    public boolean associate(Tag tag){
        boolean b1 = tag.getOrganizations().add(this);
        boolean b2 = tags.add(tag);
        return b1 || b2;
    }

    public boolean disassociate(Tag tag){
        boolean b1 = tag.getOrganizations().remove(this);
        boolean b2 = tags.remove(tag);
        return b1 || b2;
    }
}

Сценарий

public void demo() {
    Tag tag = getTag(tagUid);
    organization.associate(tag);
    final Organization saved = service.saveOrganization(organization);
}

Проблема, с которой мы сталкиваемся, заключается в том, что если мы свяжем тег и организацию и сохраним Организация, мы получаем ОБНОВЛЕНИЕ для объекта «Организация», но не получаем ОБНОВЛЕНИЕ для объекта «Тег» и его связи. Обратное тоже верно. Сохранение только тега вызывает запись UPDATE для тега, но не для организации. Мы заметили, что смогли получить запись аудита для обеих сторон, если сохранили обе стороны ассоциации.

Является ли это поведение предполагаемой функциональностью или это то, что мы могли бы исправить, обновив наши определения сущностей?

...