Você sempre está alterando o mesmo objeto, neste caso é o grandeComissao.
Acredito que você deveria criar sempre um novo ao invés de atualizar o existente.
Obrigado por tentar me ajudar. O meu objetivo é pegar o registro de uma tabela chamada Membro através do ID e gravar esses registro em outra tabela chamada GrandeComissao.
Essas são minhas entidades
@Entity
@Table(name = "membro")
public class Membro {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
@NotNull
private String nome;
@NotNull
private String email;
private String senha;
e essa outra
@Entity
@Table(name = "grande_comissao")
public class GrandeComissao {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
private String nome;
private Integer voto;
@staroski será que existe uma forma de alterar o código para que ele consiga pegar o registro que está na tabela membro e salvar como se fosse um novo registro na tabela grandeComissao?
Primeiramente o framework se chama Spring e não Sprint.
Você tem que criar um novo objeto do tipo GrandeComissao.
Atualmente você está usando uma variável de instância, por isso está alterando sempre o mesmo objeto, está errado, você tem que criar um novo, usa uma variável local, aí fica mais legível.
@PostMapping("/{codigo}")
public ResponseEntity<GrandeComissao> buscarPeloCodigo(@PathVariable Long codigo) {
Optional<Membro> membro = this.membroRepository.findById(codigo);
GrandeComissao grandeComissao = new GrandeComissao(); // criar um novo objeto
grandeComissao.setNome(membro.get().getNome());
grandeComissao.setVoto(1);
grandeComissaoRepository.save(grandeComissao);
return ResponseEntity.ok(grandeComissao);
}
Eu tinha colocando ela como variável global e ao colocar ele como local funcionou perfeitamente. Sou muito grato, muito obrigado. É muito estranho só pelo simples fato de colocar ela como local ela funcionar.
Evite ao máximo usar variáveis de forma global (escopo de classe). Isso só dificulta as implementações e pode trazer efeitos colaterais em sistemas web onde há vários usuários usando o sistema.
Java não tem o conceito de variável global, o mais próximo de uma variável global seria uma variável de classe (estática).
Imagino que você tinha uma variável de instância (não estática).
Não tem nada de estranho, dessa forma você está criando um NOVO objeto.
Se você chama o save do seu repository passando um novo objeto, ele fará um INSERT no banco, se passar um objeto já existente, ele fará o UPDATE no banco.