Spring JPA Hibernate:如何使用持久的多对多子对象列表保存对象

时间:2018-09-05 04:53:11

标签: hibernate spring-data-jpa

我有组,角色,URL实体,每个组具有多个角色,每个角色具有多个URL。那里已经有一些组,角色和URL插入到db中。当我创建具有某些现有角色的新组时,由于组不是持久对象而导致失败。

是否有某种方法可以创建具有多对多持久对象的非持久对象?

下面的代码不起作用

@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;
}

0 个答案:

没有答案