Удалить объект с каскадом всех - PullRequest
0 голосов
/ 19 апреля 2019

Я использую весеннюю загрузку 2 с реализацией jpa и hibernate

Некоторые из моих сущностей

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {

    @Id
    @GenericGenerator(name = "samplings_id_seq", strategy = "com.permacon.lcm.model.SamplingSequenceGenerator")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "samplings_id_seq")
    private Integer id;

    @OneToMany(mappedBy = "sampling", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Samples> samples = new ArrayList<>();

    ...
}


@Entity
public class Samples {
    @EmbeddedId
    private SampleId id;

    @MapsId("samplingId")
    @ManyToOne(optional = false)
    private Samplings sampling;

    @OneToOne(mappedBy = "sample", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private TestSamples testSamples;

    ...
}

@Entity
public class TestSamples {
    @Id
    @SequenceGenerator(name = "test_samples_id_seq", sequenceName = "test_samples_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "test_samples_id_seq")
    private Integer id;

    @OneToOne(fetch = FetchType.LAZY)
    private Samples sample;


    @OneToOne(mappedBy = "testSample", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private Absorptions absorptionTest;

    @OneToOne(mappedBy = "testSample", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private Compressions compressionTest;

}

ALTER TABLE ONLY test_samples
    ADD CONSTRAINT test_samples_id_constraint FOREIGN KEY (sample_sample_letter, sample_sampling_id) REFERENCES samples(sample_letter, sampling_id);

На самом деле, чтобы удалить сэмплы, я использую итератор и удаляю нужный.

for (Iterator iterator = samples.iterator(); iterator.hasNext();) {
    Samples next = (Samples) iterator.next();

    ...
     iterator.remove();
}

Если я удаляю семпл без TestSamples, то он отлично работает, если он есть, который не работает с ограничениями нарушения (test_samples_id_constraint)

Я вижу, тогда hibernate обновляет таблицу семплирования,удаление в таблице сэмплов, но оно ничего не делает с TestSamples, ничего не касается абсорбционного теста и компрессионного теста.

Есть идеи?

Нужно ли что-то делать вручную или операция удаления должна выполняться автоматически?

У меня есть каскад всех.

1 Ответ

0 голосов
/ 19 апреля 2019

Давайте добавим информацию о столбцах во внешних ключах в сущности TestSample

@OneToOne(fetch = FetchType.LAZY)    
@JoinColumns({
        @JoinColumn(name="sample_sample_letter", referencedColumnName="sample_letter"),
        @JoinColumn(name="sample_sampling_id", referencedColumnName="sampling_id")
    })
private Samples sample;

введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...