0
我开始使用Spring引导RESTful系统上删除。我有两个表“用户”,并且有一个中间表“user_permission”,它不仅具有外键id_user和id_permission一个多一对多的关系“权限”。春天JPA实现POST在中间表
我已经设法让它显示用户从GET到“users/{id}/permissions”的权限,但我仍然不知道如何添加与POST的关系或使用DELETE删除它。我试过用原生Querys来做,但我读到JPA中不存在INSERT。有关如何实施它的任何建议?
我想要做的是使用POST在用户/ {id} /权限/ {id} 上创建关系,并使用具有相同url的DELETE删除该关系。
这是我的用户控制器:
@RestController
@RequestMapping("/permisos-api")
public class UsuarioController {
@Autowired
UsuarioRepository userRepository;
@GetMapping("/usuarios")
public List<Usuario> getAllUsuarios() {
return userRepository.findAll();
}
@GetMapping("/usuarios/{id}")
public ResponseEntity<Usuario> getUsuarioById(@PathVariable(value = "id")
Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok().body(user);
}
@PostMapping("/usuarios")
public Usuario createUsuario(@Valid @RequestBody Usuario user) {
return userRepository.save(user);
}
@PutMapping("/usuarios/{id}")
public ResponseEntity<Usuario> updateUsuario(@PathVariable(value = "id")
Integer userId, @Valid @RequestBody Usuario
userDetails) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
user.setNombre(userDetails.getNombre());
user.setStatus(userDetails.getStatus());
Usuario updatedUser = userRepository.save(user);
return ResponseEntity.ok(updatedUser);
}
@DeleteMapping("/usuarios/{id}")
public ResponseEntity<Usuario> deleteUusario(@PathVariable(value = "id")
Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
userRepository.delete(user);
return ResponseEntity.ok().build();
}
@GetMapping("/usuarios/{id}/permisos")
public ResponseEntity<Collection<Permiso>>
getPermisosOfUsuario(@PathVariable(value = "id") Integer userId) {
Usuario user = userRepository.findOne(userId);
if(user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok().body(user.getPermisoCollection());
}
}
感谢。
你甚至知道JPA是什么吗?关系通过适当的实体映射进行自动处理 – Antoniossss
[JPA ManyToMany persist]的可能重复(https://stackoverflow.com/questions/31534871/jpa-manytomany-persist) – Antoniossss
恐怕您正在做大量冗余工作。随着JPA可以在@RepositoryRestResource注释添加到您的JPA库和Spring自动生成所有CRUD方法。 –