Я использую весеннюю загрузку 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, ничего не касается абсорбционного теста и компрессионного теста.
Есть идеи?
Нужно ли что-то делать вручную или операция удаления должна выполняться автоматически?
У меня есть каскад всех.