исключение отдельного объекта путем каскадного сохранения - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть куча новых сущностей, которые я пытаюсь сохранить через каскад, но я получаю исключение, что сущность B отсоединена.

Сущность A является новой и имеет несколько сущностей AB. У сущности AB есть составной первичный ключ, который содержит идентификаторы A и B. B уже существует, и я понимаю, что при попытке сохранить B выдается исключение отсоединенной сущности.

Теперь у меня вопрос, почему он вообще пытается сохранить B, поскольку в AB нет каскадного набора для B и как я могу хранить A и AB без исключения.

Следующие классы раздели до необходимого.

public class A {

    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    @OneToMany(mappedBy = "a", cascade = CascadeType.PERSIST, orphanRemoval = true)
    private Set<AB> ab = new LinkedHashSet<>();
}

public class AB implements Serializable {

    @EmbeddedId
    private ABPK id = new ABPK();

    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)    
    @ManyToOne(optional = false)
    @MapsId("aId")
    @JoinColumn(name = "a_id", insertable = false, updatable = false)
    private A a;

    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    @ManyToOne(optional = false)
    @MapsId("bId")
    @JoinColumn(name = "b_id", insertable = false, updatable = false)
    private B b;

}

@Embeddable
public class ABPK implements Serializable {

    @Column(name = "a_id", insertable = true, updatable = false)
    private Long aId;

    @Column(name = "b_id", insertable = true, updatable = false)
    private Long bId;

}

Я использую Spring репозиторий, и я вызываю save на объекте выше A, который каскадно спускается к A и AB.

...