Я пытаюсь получить отношение 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();
}'
Я добавил модульный тест




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