ManyToOne: deleteAll () и delete (объект) не работают

Я пытаюсь получить отношение ManyToOne к работе, все остальные отношения работают, кроме этого. Это список учетных записей, привязанных к человеку.

Проблемы:

-Когда я пытаюсь сохранить учетную запись:

Account accountSave = AccountRepository.save(account); //works

-Когда я пытаюсь сохранить несколько учетных записей:

Account accountASave = AccountRepository.save(accountA);
Account accountBSave = AccountRepository.save(accountB);
//not working: results in : Expected <2> but was:<4>

-Когда я пытаюсь удалить учетную запись:

Account accountSave = AccountRepository.save(account);
AccountRepository.delete(account);
//does not delete the account

Когда я пытаюсь удалить все учетные записи:

Account accountASave = AccountRepository.save(accountA);
Account accountBSave = AccountRepository.save(accountB);
AccountRepository.deleteAll();
//deleted instance passed to merge
  • Когда я пытаюсь спасти клерка: работает
  • Когда я пытаюсь сохранить несколько клерков: работает
  • Когда я пытаюсь удалить клерка: работает
  • Когда я пытаюсь удалить всех клерков: работает (каждый раз используется та же стратегия, что и выше)

Я пытался возиться с cascadeType, но не повезло

=> изменение: cascade = CascadeType.ALL на

cascade = {CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE}

не решает проблему

  • добавление @Transaction в методы транзакции не решает никаких проблема
  • добавление @OnDelete(action = OnDeleteAction.CASCADE) в Аккаунт не помочь либо

Отношение OneToMany:

@Entity
@DiscriminatorValue("B")
public class Clerk extends Werknemer {

    private String salary;

    @OneToMany(mappedBy = "clerk", cascade = CascadeType.ALL, 
        orphanRemoval = true)
    private List<Account> accounts = new ArrayList<>();
    (...)
}

Отношение ManyToOne:

@Entity
@Table(name = "ACCOUNTS")
public class Account implements Serializable, Comparable<Account>{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "clerk_id")
    private Clerk clerk;

    private String text;

    (...)
}

deleteAll () и delete (object) должны работать и сохранение 2 учетных записей, а не 4, когда я пытаюсь сохранить 2 учетных записи модульный тест:

'    @Test
public void DeleteAccount() {
    Account account = new Account();
    account.setTekst("Tekst");

    Bediende bediende = new Bediende();
    bediende.setBedrijfsnaam("Bedrijfsnaam");
    bediende.setNaam("Naam");
    bediende.setVoornaam("Voornaam");
    bediende.setPersoneelsnummer(12345678);
    bediende.setSalaris("Salaris");

    Werkadres werkadres = new Werkadres();
    werkadres.setGemeente("Gemeente");
    werkadres.setHuisnummer("Huisnummer");
    werkadres.setPostcode("Postcode");
    werkadres.setStraat("Straat");

    bediende.setWerkadres(werkadres);

    account.setBediende(bediende);

    List<Account> accounts = new ArrayList<>();
    accounts.add(account);


    bediende.setAccounts(accounts);

    Account accountSave = accrep.save(account);
    accrep.delete(account);

    Iterable<Account> accountLijst = accrep.findAll();
    for (Account a : accountLijst) {
        Assert.fail();
    }
    Assert.assertTrue(true);
    accrep.deleteAll();
}'

Не удалось воспроизвести это, отлично работает в моем случае

mukut bhattacharjee 21.12.2018 11:51

Я добавил модульный тест

kroff3 21.12.2018 12:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
2
155
0

Другие вопросы по теме