Hibernate, JPA, does not save the new data in the database

0

I have a Java Spring MVC application, with Hibernate and JPA and HTML interface.

I have two forms that depend on the CadernoCadastrados class and their attributes.

In the first form I enter the data of a new Notebook, saved in the database and a new ID is created for that record.

When I do a search, in case number = 44, the second form is displayed, which comes with some fields of the first form already filled in, but disabled, and additional fields of the Notebook class enabled for editing. That is, in this second form I will only add more information to the same record that was added by the first form:

The problem is that when I click the "Save" button on the second form, it does not save the new data entered in the second form in the database.

Class CadernosCadastrados.

@Entity public class CadernosCadastrados implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Long numeroID;
private String numeroCaderno;
private String cras;
private String dataRecebido;
private String recebidoPor;
private String avaliadoPor;
@Column(length = 2000)
private String observacoes;
private String codigoFamiliar;
private String nis;
private String data;
private String cpf;
private String rg;
private String ctps;
private String caixa;
private String cadernos;
private String certidaoNascimento;
private String fichaExclusao;
private String fichaAveriguacao;
private String suplementar;
private String suplementarDois;
private String entrevistador;
private String responsavelFamiliar;
private String pendenciaDocumentacao;
private String pendenciaFormulario;
private String pendenciaAssinatura;  
public String status;

Change method that is triggered by clicking the "Save" button on the second form:

@RequestMapping("alterar")
public String alterar(CadernosCadastrados objeto, Long numeroID, Model model) {

    List<CadernosCadastrados> cadernos = daoCadernosCadastrados.listar();

    daoCadernosCadastrados.alterar(objeto);
    //if(daoCadernosCadastrados.limpar(objeto )) {; 


    return "public/sucessos";

}

Method change in the DaoCadernoCadastrados class, which is called by the change method that I showed earlier:

public void alterar(CadernosCadastrados objeto) {

    entityManager.merge(objeto);

}
    
asked by anonymous 29.10.2018 / 15:02

2 answers

0

I would use an extender repository of JpaRepository < & gt ;. Example of class I did:

@Repository
public interface PessoaFisicaRepository extends JpaRepository<PessoaFisica, Long> {

}

And in the service I did:

@Service
public class PessoaFisicaService {

          ** vários outros métodos **

     public PessoaFisica atualizar(PessoaFisica pessoaFisicaJson) {

            PessoaFisica pessoaFisicaBD = buscar(pessoaFisicaJson.getId());
            try {
                atualizarDados(pessoaFisicaBD, pessoaFisicaJson);
                pessoaFisicaBD = pessoaFisicaRepository.save(pessoaFisicaBD);
            } catch (DataIntegrityViolationException erro) {
                throw new ExcecaoDeIntegridadeDeDados("A integridade dos dados fornecidos estão corrompidos e/ou repetidos. Por favor, verifique-os e tente novamente");
            }
            return pessoaFisicaBD;
        }

     private void atualizarDados(PessoaFisica pessoaFisicaBD, PessoaFisica pessoaFisicaJson) {

            if (pessoaFisicaJson.getNome() != null) {
                pessoaFisicaBD.setNome(pessoaFisicaJson.getNome());
            }
            **outros métodos**
    }

     public PessoaFisica converteDeDto(PessoaFisicaDto pessoaFisicaDto) {

     PessoaFisica pessoaFisica = new PessoaFisica(pessoaFisicaDto.getAtivo(), pessoaFisicaDto.getIdEmpresa().. outros getters e setters

}

And finally in my resource I did:

@RestController
@RequestMapping(value = "/api/clientes/pf")
public class PessoaFisicaResource {
@PutMapping(value = "/{id}")
    public ResponseEntity<Void> atualizar(@Valid @RequestBody PessoaFisicaDto pessoaFisicaDto, @PathVariable Long id) {
        PessoaFisica pessoaFisica = pessoaFisicaService.converteDeDto(pessoaFisicaDto);
        pessoaFisica.setId(id);
        pessoaFisica = pessoaFisicaService.atualizar(pessoaFisica);
        return ResponseEntity.noContent().build();
    }
}

My DTO

@Getter  // lombok
@Setter  //lombok
public class PessoaFisicaDto implements Serializable {
private Long id;
@NotNull(message = "O campo ativo é obrigatório")
@Min(value = 0, message = "Digite 0 para inativo ou 1 para ativo")
@Max(value = 1, message = "Digite 0 para inativo ou 1 para ativo")
private Byte ativo;
@NotNull(message = "O campo id empresa é obrigatório")
   **vários outros atributos

}

How does it work? I send a JSON to the defined endpoint, in this case: / api / clients / pf / {id} The resource handles the request, transforming DTO into Model, with the convertDDTO method. Then call the method overflow and finally build the responseEntity.

    
29.10.2018 / 15:35
1

Your code is very confusing, let's start with the "change" service, in it you make a if (objeto.equals(objeto)) , this does not make any sense, you are comparing something with itself, so I recommend removing this line or putting a validation that does sense. Just below you call a listing that does nothing List<Caderno> cadernos = dao.listar(); . Then we see an implementation of your DAO with a method that changes your notebook object, in it you get as parameter the class Caderno and have a if that will always be false because you always pass id to null because it is Integer id = null; if (id != null)... .

    
29.10.2018 / 15:38