Spring JPA Hibernate: как сохранить объект с сохраненным списком подобъектов «многие ко многим» - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть группы «Группы», «Роли», «URL-адреса», каждая группа имеет несколько ролей, а каждая роль имеет несколько URL-адресов. Там, где уже некоторые группы, роли и URL-адреса вставлены в БД. Когда я создаю новую группу с некоторыми существующими ролями, она не удалась, так как группа не является постоянным объектом.

Есть ли какой-нибудь способ создать непостоянный объект с постоянными объектами "человек-ко-многим"?

Ниже код не работает

@PostMapping(value="/api/groups")
@ResponseBody
public Group saveGroup(@RequestBody Group group) {
    Group existed  = groupRepository.findByName(group.getName());
    if(existed == null) {
        existed = groupRepository.save(group);
    }
    return existed;
}

Ниже код отлично работает

@PostMapping(value="/api/groups")
@ResponseBody
public Group saveGroup(@RequestBody Group group) {
    Group existed  = null;
    if(group != null) {
        List<Role> roles = group.getRoles();
        List<Role> persistRoles = new ArrayList<>();
        if(roles != null) {
            roles.forEach(role -> {
                Role temp = roleRepository.findByIdOrName(role.getRole_id(), role.getName());
                if(temp == null) {
                    try {
                        roleRepository.save(role);
                    } catch (Exception e) {

                    }
                }
                if(temp != null) {
                    persistRoles.add(temp);
                }
            });
        }

        existed  = groupRepository.findByName(group.getName());
        if(existed == null) {
            existed = groupRepository.save(new Group(group.getName()));
            existed.setRoles(persistRoles);
            existed = groupRepository.save(existed);
        }
    }
    return existed;
}
...