У меня есть два класса:
@Entity
public class Dinner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long dinnerId;
@Column(unique = true)
private String date;
@OneToMany(mappedBy="dinner", orphanRemoval = true, cascade = CascadeType.PERSIST)
private List<DinnerTable> tables = new ArrayList<>();
@Entity
public class DinnerTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long dinnerTableId;
private int places;
@ManyToOne
@JoinColumn(name = "dinner_id")
@JsonIgnore
private Dinner dinner;
Если я выполню это, он ничего не удалит, даже если он выполнит метод deleteById для каждого DinnerTable.
@Override
public void test1(String date) {
Dinner dinner = dinnerService.getByDate(date);
for(DinnerTable table: dinner.getTables()){
dinnerTableRepository.deleteById(table.getDinnerTableId());
}
}
Вместо этого, если я выполняю этот метод, он корректно удаляет объекты DinnerTable из базы данных.
@Override
public void test2(String date) {
Dinner dinner = dinnerService.getByDate(date);
dinnerTableRepository.deleteById(1);
dinnerTableRepository.deleteById(2);
dinnerTableRepository.deleteById(3);
}
Эти методы находятся внутри этого класса обслуживания
@Service
@Transactional
public class DinnerServiceImpl implements DinnerService {...}
И DinnerTableRepository - это класс:
@Repository
public interface DinnerTableRepository extends JpaRepository<DinnerTable, Long> {
}
EDIT
Это тоже не работает:
List<DinnerTable> tables = dinner.getTables();
for(int i = 1; i < 3; i++){
dinnerTableRepository.deleteById(tables.get(i).getDinnerTableId());
}
Это отлично работает, фактически удаляет объекты DinnerTable из базы данных:
long id = 40; //id of the first DinnerTable to remove
for(int i = 1; i < 3; i++){
dinnerTableRepository.deleteById(id + i);
}
РЕДАКТИРОВАТЬ 2
Это работает:
List<Long> ids = new ArrayList<>(Arrays.asList(43L, 44L, 45L));
for(Long id: ids){
dinnerTableRepository.deleteById(id);
}
РЕДАКТИРОВАТЬ 3
Таким образом, это работает:
for(int i = 0; i < dinner.getTables().size(); i++){
dinner.removeTable(dinner.getTables().get(i));
}
dinnerRepository.save(dinner);