ManyToMany nao consigo salvar os relacionamentos
23/11/2019
0
Estou fazendo uma api com java e springboot,
TABELA_PACIENTE - contem o seguinte campos {
Integer id , String nome, String sobrenome, Integer idade;
}
E A
TABELA_ALERGIAS - contem os seguintes campos{
Integer id, String nome;
}
A TABELA_ALERGIAS ,já contes alergias no BANCO DE DADOS, eu gostaria de quando cria-se um PACIENTE, ele já relacionava com as alegrias, e salva, fiz um relacionamento ManyToMany, pois quando apagar o PACIENTE, nao pode apagar as alergias,
estou tentando fazer isso, porem quando eu
tento SALVAR O PACIENTE relacionando com as alergias, no POST ele recebe objeto com as alergias, porem quando salva, ele salva somente o PACIENTE .
@Entity
public class Paciente implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String sobrenome;
private Integer idade;
//@JsonManagedReference
@ManyToMany(mappedBy = "paciente")
private List<Alergia> alergias = new ArrayList<>();
public Paciente() {
}
public Paciente(Integer id, String nome, String sobrenome, Integer idade) {
super();
this.id = id;
this.nome = nome;
this.sobrenome = sobrenome;
this.idade = idade;
}
[GETS SETS..]
____________________________________________________________________________
@Entity
public class Alergia {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String nome;
// @JsonBackReference
@JsonIgnore
@ManyToMany
@JoinTable(name = "Paciente_Alergia",
joinColumns = @JoinColumn(name = "alergia_id"),
inverseJoinColumns = @JoinColumn(name = "Paciente_id"))
private List<Paciente> paciente = new ArrayList<>();
public Alergia() {
}
public Alergia(Integer id, String nome) {
super();
this.id = id;
this.nome = nome;
}
[GET'S SET'S ...]
________________________________________________________________________________
@RestController
@RequestMapping(value = "pacientes")
public class PacienteResource {
@Autowired
PacienteRepository pacienteRepository;
@Autowired
PacienteService pacienteService;
@GetMapping(value = "/")
public ResponseEntity<Optional<Paciente>> foundById(@PathVariable Integer id){
Optional<Paciente> obj = pacienteRepository.findById(id);
return ResponseEntity.ok().body(obj);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Void> insert (@Valid @RequestBody Paciente obj){
obj = pacienteService.insert(obj);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/").buildAndExpand(obj.getId()).toUri();
return ResponseEntity.created(uri).build();
}
}
_________________________________________________________________________________
@Service
public class PacienteService {
@Autowired
PacienteRepository repo;
@Autowired
AlergiaRepository alergiaRepository;
public Paciente insert(Paciente obj) {
//obj.setId(null);
return repo.save(obj);
}
}
_________________________________________________________________________________
@Repository
public interface AlergiaRepository extends JpaRepository<Alergia, Integer>{
}
_________________________________________________________________________________
@Repository
public interface PacienteRepository extends JpaRepository<Paciente, Integer> {
}
________________________________________________________________________________
estou criando no Banco assim
public void run(String... args) throws Exception {
Paciente p1 = new Paciente(null, "Usuario01" , "Lopes De Souza", 22);
Paciente p2 = new Paciente(null, "User2", "teste", 32);
Alergia ale1 = new Alergia(null, "CACAU");
Alergia ale2 = new Alergia(null, "DIPRIONA");
Alergia ale3 = new Alergia(null, "PARACEDAMOL");
Alergia ale4 = new Alergia(null, "BANANA");
p1.getAlergias().add(ale1);
p2.getAlergias().add(ale4);
ale1.getPaciente().add(p1);
ale4.getPaciente().add(p2);
pacienteRepository.saveAll(Arrays.asList( p1 , p2));
alergiaRepository.saveAll(Arrays.asList(ale1 , ale2, ale3 , ale4));
}
}
_____________________________________________________________________________
desse jeito ele salva e relaciona perfeitamente
porem quando passo no POSTMAN, para teste,
{
"nome": "Ariel",
"sobrenome": "Lopes De Souza",
"idade": 22,
"alergias": [
{
"id": 2 ,
"nome": "CACAU"
}
]
}
ELE CHEGA NO POST E NO SERVICES, porem salva somente o usuario sem as alergias
**texto em negrito**
TABELA_PACIENTE - contem o seguinte campos {
Integer id , String nome, String sobrenome, Integer idade;
}
E A
TABELA_ALERGIAS - contem os seguintes campos{
Integer id, String nome;
}
A TABELA_ALERGIAS ,já contes alergias no BANCO DE DADOS, eu gostaria de quando cria-se um PACIENTE, ele já relacionava com as alegrias, e salva, fiz um relacionamento ManyToMany, pois quando apagar o PACIENTE, nao pode apagar as alergias,
estou tentando fazer isso, porem quando eu
tento SALVAR O PACIENTE relacionando com as alergias, no POST ele recebe objeto com as alergias, porem quando salva, ele salva somente o PACIENTE .
@Entity
public class Paciente implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String sobrenome;
private Integer idade;
//@JsonManagedReference
@ManyToMany(mappedBy = "paciente")
private List<Alergia> alergias = new ArrayList<>();
public Paciente() {
}
public Paciente(Integer id, String nome, String sobrenome, Integer idade) {
super();
this.id = id;
this.nome = nome;
this.sobrenome = sobrenome;
this.idade = idade;
}
[GETS SETS..]
____________________________________________________________________________
@Entity
public class Alergia {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String nome;
// @JsonBackReference
@JsonIgnore
@ManyToMany
@JoinTable(name = "Paciente_Alergia",
joinColumns = @JoinColumn(name = "alergia_id"),
inverseJoinColumns = @JoinColumn(name = "Paciente_id"))
private List<Paciente> paciente = new ArrayList<>();
public Alergia() {
}
public Alergia(Integer id, String nome) {
super();
this.id = id;
this.nome = nome;
}
[GET'S SET'S ...]
________________________________________________________________________________
@RestController
@RequestMapping(value = "pacientes")
public class PacienteResource {
@Autowired
PacienteRepository pacienteRepository;
@Autowired
PacienteService pacienteService;
@GetMapping(value = "/")
public ResponseEntity<Optional<Paciente>> foundById(@PathVariable Integer id){
Optional<Paciente> obj = pacienteRepository.findById(id);
return ResponseEntity.ok().body(obj);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Void> insert (@Valid @RequestBody Paciente obj){
obj = pacienteService.insert(obj);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/").buildAndExpand(obj.getId()).toUri();
return ResponseEntity.created(uri).build();
}
}
_________________________________________________________________________________
@Service
public class PacienteService {
@Autowired
PacienteRepository repo;
@Autowired
AlergiaRepository alergiaRepository;
public Paciente insert(Paciente obj) {
//obj.setId(null);
return repo.save(obj);
}
}
_________________________________________________________________________________
@Repository
public interface AlergiaRepository extends JpaRepository<Alergia, Integer>{
}
_________________________________________________________________________________
@Repository
public interface PacienteRepository extends JpaRepository<Paciente, Integer> {
}
________________________________________________________________________________
estou criando no Banco assim
public void run(String... args) throws Exception {
Paciente p1 = new Paciente(null, "Usuario01" , "Lopes De Souza", 22);
Paciente p2 = new Paciente(null, "User2", "teste", 32);
Alergia ale1 = new Alergia(null, "CACAU");
Alergia ale2 = new Alergia(null, "DIPRIONA");
Alergia ale3 = new Alergia(null, "PARACEDAMOL");
Alergia ale4 = new Alergia(null, "BANANA");
p1.getAlergias().add(ale1);
p2.getAlergias().add(ale4);
ale1.getPaciente().add(p1);
ale4.getPaciente().add(p2);
pacienteRepository.saveAll(Arrays.asList( p1 , p2));
alergiaRepository.saveAll(Arrays.asList(ale1 , ale2, ale3 , ale4));
}
}
_____________________________________________________________________________
desse jeito ele salva e relaciona perfeitamente
porem quando passo no POSTMAN, para teste,
{
"nome": "Ariel",
"sobrenome": "Lopes De Souza",
"idade": 22,
"alergias": [
{
"id": 2 ,
"nome": "CACAU"
}
]
}
ELE CHEGA NO POST E NO SERVICES, porem salva somente o usuario sem as alergias
**texto em negrito**
Ariel
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)