Удалить Hibernate просто не будет срабатывать - PullRequest
0 голосов
/ 18 февраля 2019

Я спрашивал об этом раньше, но до сих пор не имею понятия, что происходит ...

Я читал о сущности, которую необходимо очистить от отношений перед удалением, и о cascade.all вродительская сущность, однако я до сих пор не понимаю, как hibernate ничего не делает ...

@Transactional
public void deleteAllinRange(LocalDate a, LocalDate b) {
List<Invoice> z = invoiceRepo.selector(a,b);
    for(Invoice x : z){
        x.setOwner(null);
        invoiceRepo.delete(x);
    }

входящий в цикл for z размер списка равен 314, и есть все сущности, которые я ожидаю, что они там будут.Затем я попытался установить для null значение null, так как это единственное отношение к родительскому элементу.

После обнуления владельца все атрибуты в сущности x имеют тип long, string или localDate, поэтому, безусловно, не может быть никаких связей с родительским элементом.элемент?

Родительский элемент - это набор счетов-фактур со списком элементов счетов-фактур

@OneToMany(cascade=CascadeType.ALL, mappedBy = "owner", orphanRemoval = true)
@JsonManagedReference
private List<Invoice> invoices = new ArrayList<>();

Заполнение Java просто запустите invoiceRepo.delete(x); x 314, но на самом деле ничего не будет делать, а отладка SQL показывает, что нетдаже попытка удалить что-либо, здесь отмечается вопрос ...

Почему это происходит?Почему нет ни запросов, ни ошибок, ни ничего.

1 Ответ

0 голосов
/ 18 февраля 2019

Когда вы setOwner и не сохраняете x, это не имеет никакого эффекта.Кроме того, если у вас есть ограничение nullable=false, вы не можете установить его на ноль.

Что вы хотите сделать?Вы хотите удалить Счета и остаться владельцами?Затем вы должны удалить orphanRemoval = true.

. Или же, если вы хотите удалить сирот, оставьте все как есть и просто удалите Счета-фактуры, не задавая нулевого владельца.Он автоматически удалит осиротевших владельцев.

Если вы хотите управлять ими вручную, не устанавливайте внешний ключ и не нарушайте отношения между ними, просто удалите любую запись, когда захотите, и установите для полей значение null или value.

Кроме того, вы также можете использовать метод delete(Iterable iterable) хранилища для одновременного удаления нескольких файлов.

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