私はRESTfulシステムでSpring Bootを使い始めています。私は、外部キーid_userとid_permissionのみを持つ中間テーブル "user_permission"と多対多の関係を持つ2つのテーブル "users"と "permissions"を持っています。Spring JPAは中間テーブルにPOST DELETEを実装しています
私はすでにユーザーがGETから "users/{id}/permissions"へのアクセス許可を表示するように管理していますが、POSTで関係を追加する方法やDELETEで削除する方法はまだ分かりません。私はネイティブQuerysでそれをやろうとしましたが、JPAにはINSERTは存在しません。どのようにそれを実装するための任意の提案?
私がしたいのは、user/{id}/permission/{id} のPOSTを使用してリレーションシップを作成し、同じ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メソッドを自動的に生成します。 –