Удалить не завершено - PullRequest
       6

Удалить не завершено

0 голосов
/ 05 октября 2018

Я использую весеннюю загрузку 2, jpa и hibernate.Db is postgres Я пытаюсь удалить объект с дочерним элементом

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

    @Id
    private int year; //only last 2 number 2018 -> 18

    @Id
    @GeneratedValue
    private Integer sequenceId;

    @OneToOne
    private Colors color;

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

    @Embedded
    private TestSamplings testSamplings;

    ...
}

public class SamplingsPK implements Serializable {

    private int year;

    private Integer sequenceId;

    public SamplingsPK(int year, Integer sequenceId) {
        this.sequenceId = sequenceId;
        this.year = year;
    }

    private SamplingsPK() {

    } 
    ...
}

@Entity
@IdClass(SamplesPK.class)
public class Samples{

    @Id
    private String sampleLetter;

    @Id
    @ManyToOne(optional = false)
    @JoinColumns({
        @JoinColumn(name = "sampling_id", referencedColumnName = "sequenceId"),
        @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
    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 Compressions compressionTest;
    ....
}

@Repository
public interface SamplingsRepository extends JpaRepository<Samplings, SamplingsPK> {
}

Если я удаляю Samplings, Samples, TestSamples и Compressions должны быть удалены.

My delete

@Transactional
public void deleteSamplings(int year, Integer id) {
    samplingsRepository.deleteById(new SamplingsPK(year, id));

}

Когда этот метод вызывается, я вижу

delete from samples, где sample_letter =?и sampling_id =?и sampling_year =?

2018-10-03 22: 21: 05.832 ОШИБКА 14511 --- [nio-8080-exec-9] ohiExceptionMapperStandardImpl: HHH000346: Ошибка во время управляемого сброса [Пакетное обновление вернуло неожиданное количество строк изобновление [0];фактическое количество строк: 0;ожидается: 1] 2018-10-03 22: 21: 05.834 INFO 14511 --- [nio-8080-exec-9] ohejbinternal.AbstractBatchImpl: HHH000010: При выпуске пакета оно все еще содержало операторы JDBC 2018-10-03 22:21: 05.848 ОШИБКА 14511 --- [nio-8080-exec-9] oaccC [. [. [/]. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] выбросило исключение [Запрособработка не удалась;вложенное исключение - org.springframework.orm.ObjectOptimisticLockingFailureException: пакетное обновление вернуло неожиданное количество строк из обновления [0];фактическое количество строк: 0;ожидается: 1;вложенным исключением является org.hibernate.StaleStateException: пакетное обновление вернуло неожиданное количество строк из обновления [0];фактическое количество строк: 0;ожидается: 1] с первопричиной в com.lcm.service.SamplingsService $$ EnhancerBySpringCGLIB $$ d589edcb.deleteSamplings () ~ [main /: na]

нет запросов на выборку и другие

просто найдите способ удалить каждую вещь ...

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Сгенерированный запрос на удаление является подозрительным.

delete from samples where sample_letter=? and sampling_id=? and sampling_year=?

Учитывая, что вы удаляете id, предложение where не должно включать условие sample_letter = ?.Это потому, что new SamplingsPK(year, id) не имеет информации о sample_letter.Я бы выяснил, какое значение передается для параметра sample_letter.

Кроме того, два поля, помеченные как @Id в Samplings классе, не кажутся семантически правильными с @IdClass(SamplesPK.class).

Я бы посоветовал удалить @Id из поля sampleLetter или создать другой IdClass с ключами sampleLetter year и sequenceId.

0 голосов
/ 16 октября 2018

Вероятно, это потому, что вы пытаетесь обновить / удалить что-то, что не имеет различий или больше не существует.

Кроме того, свойство ID не должно устанавливаться явно с помощью установщиков (кажется, что это нев вашем случае), если вы используете какой-либо класс генератора.

Если вы явно установите значение свойства Id, это вызовет эту ошибку.Проверьте в файле отображения Hibernate поле generator = "native" или "incremental", и в вашей DATABASE отображенная таблица не является auto_incremented.

Также попробуйте обновить таблицу, чтобы установить auto_increment

...