我想扩展之前文章中提到的要求以支持删除。我们有两个数据模型对象 - 组织和部门共享一对多关系。通过下面的映射,我可以从组织对象中读取部门列表。我没有添加级联 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
}
}
白猪掌柜的
qq_笑_17
Helenr
相关分类