Я бы хотел расширить требования, указанные в более раннем посте , для поддержки удаленийУ нас есть два объекта модели данных - организация и отдел, разделяющие отношения один ко многим.С помощью приведенного ниже сопоставления я могу прочитать список отделов из объекта организации.Я не добавил свойство каскада ALL, чтобы ограничить добавление отдела при создании организации.
Как мне изменить аннотацию @OneToMany (и, возможно, @ManyToOne), чтобы ограничить вставки отдела, но каскадную операцию удаления, чтобывсе связанные отделы удаляются при удалении объекта организации?
@Entity
@Table(name="ORGANIZATIONS")
public class Organization{
@Id
@GeneratedValue
Private long id;
@Column(unique=true)
Private String name;
@OneToMany(mappedBy = "organization", fetch = FetchType.EAGER)
private List<Department> departments;
}
@Entity
@Table(name="DEPARTMENTS")
Public class Department{
@Id
@GeneratedValue
Private long id;
@Column(unique=true)
Private String name;
@ManyToOne(fetch = FetchType.EAGER)
private Organization organization;
}
Код для удаления организации - это просто строка
organizationRepository.deleteById(orgId);
Контрольный пример для проверки этого приведен ниже
@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
@Transactional
public class OrganizationRepositoryTests {
@Autowired
private OrganizationRepository organizationRepository;
@Autowired
private DepartmentRepository departmentRepository;
@Test
public void testDeleteOrganization() {
final organization organization = organizationRepository.findByName(organizationName).get(); //precondition
Department d1 = new Department();
d1.setName("d1");
d1.setorganization(organization);
Department d2 = new Department();
d2.setName("d2");
d2.setorganization(organization);
departmentRepository.save(d1);
departmentRepository.save(d2);
// assertEquals(2, organizationRepository.getOne(organization.getId()).getDepartments().size()); //this assert is failing. For some reason organizations does not have a list of departments
organizationRepository.deleteById(organization.getId());
assertFalse(organizationRepository.findByName(organizationName).isPresent());
assertEquals(0, departmentRepository.findAll().size()); //no departments should be found
}
}