【问题标题】:data does not save to the database Spring boot数据不保存到数据库 Spring boot
【发布时间】:2018-05-12 05:05:47
【问题描述】:

我在保存关系中的数据时遇到问题,我正在使用 spring boot .. 数据没有保存在基础上,并且日志中没有出现错误

我会告诉你我的关系类。

@Entity
@Table(name = "pacientes", schema = "sau", uniqueConstraints= @UniqueConstraint(columnNames={"id_pessoa", "cns"}))
public class Pacientes implements Serializable  {

    private static final long serialVersionUID = 5776384003601026304L;
    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idPaciente;

    @NotNull
    @JoinColumn(name="id_pessoa")
    @ManyToOne(cascade = CascadeType.ALL)
    private Pessoas pessoa;


    @Column(name = "id_responsavel_familiar")
    private BigDecimal responsavelFamiliar;


    @Column(name = "nomeResponsavel")
    private String nomeResponsavel;


    @Column(name = "cpfResponsavel")
    private String cpfResponsavel;


    @Column(name = "cnsResponsavel")
    private String cnsResponsavel;

    @Column(name = "cns")
    private String cns;


    @Column(name = "flagAlergico")
    private Integer flagAlergico;

    @Column(name = "vacinacao")
    private Integer vacinacao;


    @Column(name = "observacoesAlergias")
    private String observacoesAlergias;


    @Column(name = "microarea")
    private String microarea;


    @Column(name = "idDomicilio")
    private Long idDomicilio;


    @JoinColumn(name="id_orientacao_sexual")
    @ManyToOne(cascade = CascadeType.ALL)
    private OrientacoesSexuais orientacaoSexual;


    @JoinColumn(name="id_identidade_genero")
    @ManyToOne(cascade = CascadeType.ALL)
    private IdentidadesGenero identidadeGenero;

    @NotNull
    @Column(name = "flag_ativo", columnDefinition="int default '1'")
    private int flagAtivo;


    @JoinColumn(name="id_area")
    @ManyToOne(cascade = CascadeType.ALL)
    private Areas area;


    @JoinColumn(name="id_familia")
    @ManyToOne(cascade = CascadeType.ALL)
    private Familias familia;


    public Pacientes() {
    }

// 获取和设置

类比索

@Entity
@Table(name = "pessoas", schema = "glb")
public class Pessoas implements Serializable {

    private static final long serialVersionUID = -4042023941980758267L;
    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idPessoa;

    @Column(name = "data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;

    @Column(name = "foto")
    private String foto;

    @Column(name = "inscricao_estadual")
    private String inscricaoEstadual;

    @Column(name = "inscricao_municipal")
    private String inscricaoMunicipal;

    @NotNull
    @Column(name = "nome")
    private String nome;

    @Column(name = "nome_mae")
    private String nomeMae;

    @Column(name = "nome_pai")
    private String nomePai;

    @Column(name = "nome_social")
    private String nomeSocial;

    @NotNull
    @Column(name = "tipo_pessoa", columnDefinition=" char default 'O'")
    private String tipoPessoa;

    @NotNull
    @JoinColumn(name = "id_entidade")
    @ManyToOne(cascade = CascadeType.ALL)
    private Entidades entidade;

    public Pessoas() {
    }

// 获取和设置

类PessoasEnderecos

@Entity
@Table(name = "pessoas_enderecos" ,schema="glb")
public class PessoasEnderecos implements Serializable  {



    private static final long serialVersionUID = -2560542418318988673L;
    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idPessoaEndereco;

    @Column(name = "bloco")
    private String bloco;

    @Column(name = "cep")
    private String cep;

    @Column(name = "complemento")
    private String complemento;

    @Column(name = "numero")
    private String numero;

    @JoinColumn(name="id_bairro")
    @ManyToOne(cascade = CascadeType.ALL)
    private Bairros bairros;

    @NotNull
    @JoinColumn(name="id_entidade")
    @ManyToOne(cascade = CascadeType.ALL)
    private Entidades entidade;

    @NotNull
    @JoinColumn(name="id_logradouro")
    @ManyToOne(cascade = CascadeType.ALL)
    private Logradouros  logradouro;

    @NotNull
    @JoinColumn(name="id_municipio")
    @ManyToOne(cascade = CascadeType.ALL)
    private Municipios municipio;

    @NotNull
    @JoinColumn(name="id_pais")
    @ManyToOne(cascade = CascadeType.ALL)
    private Paises pais;

    @NotNull
    @JoinColumn(name="id_pessoa")
    @ManyToOne(cascade = CascadeType.ALL)
    private Pessoas pessoa;

    @NotNull
    @JoinColumn(name="id_uf")
    @ManyToOne(cascade = CascadeType.ALL)
    private Ufs uf;



    public PessoasEnderecos() {
    }

//获取和设置

这是我坚持对象的方法 我从客户端获取一个 json 对象并传递给这个方法。

我开始使用的 json 示例

{
    "pessoa": {
        "nome": "daaaaa",
        "nomeSocial": "aaaaaa",
        "tipoPessoa": "J",
        "pessoasEnderecos": {
            "municipio": {
                "idMunicipio": "1"
            },
            "pais": {
                "idPais": "5"
            }
        },
        "nomeMae": "aaaaaaaaa",
        "entidade": {
            "idEntidade": "1"
        }
    },
    "cns": "aaaaa",
    "cnsResponsavel": "aaaaaa",
    "cpfResponsavel": "aaaaaa",
    "nomeResponsavel": "aaaaaaaa"
}

@

RequestMapping(method = RequestMethod.POST, value = "/pacientes")
    public HttpStatus cadastrarPacientes(@RequestBody ObjectNode json) {
        try {

            Entidades entidades = new Entidades();
            entidades.setIdEntidade(json.get("pessoa").get("entidade").get("idEntidade").asLong());

            Pessoas pessoas = new Pessoas();
            pessoas.setNome(json.get("pessoa").get("nome").textValue());
            pessoas.setNomeSocial(json.get("pessoa").get("nomeSocial").textValue());
            pessoas.setNomeMae(json.get("pessoa").get("nomeMae").textValue());
            pessoas.setEntidade(new Entidades());
            pessoas.setEntidade(entidades);
            pessoas.setTipoPessoa(json.get("pessoa").get("tipoPessoa").textValue());

            Paises pais = new Paises();
            pais.setIdPais(json.get("pessoasEnderecos").get("pais").get("idPais").asLong());


            Ufs uf = new Ufs();
            uf.setIdUf(21l);

            Municipios municipio = new Municipios();
            municipio.setIdMunicipio(
                    Long.parseLong(json.get("pessoasEnderecos").get("municipio").get("idMunicipio").textValue()));

            Logradouros logradouro = new Logradouros();
            logradouro.setIdLogradouro(50);



            PessoasEnderecos pessoasEnderecos = new PessoasEnderecos();
            pessoasEnderecos.setCep(json.get("pessoasEnderecos").get("cep").textValue());
            pessoasEnderecos.setPessoa(new Pessoas());
            pessoasEnderecos.setPessoa(pessoas);
            pessoasEnderecos.setEntidade(new Entidades());
            pessoasEnderecos.setEntidade(entidades);
            pessoasEnderecos.setPais(new Paises());
            pessoasEnderecos.setPais(pais);
            pessoasEnderecos.setUf(new Ufs());
            pessoasEnderecos.setUf(uf);
            pessoasEnderecos.setMunicipio(new Municipios());
            pessoasEnderecos.setMunicipio(municipio);
            pessoasEnderecos.setLogradouro(new Logradouros());
            pessoasEnderecos.setLogradouro(logradouro);


            Pacientes pac = new Pacientes();
            pac.setPessoa(new Pessoas());
            pac.setPessoa(pessoas);
            pac.setCns(json.get("cns").toString());
            pac.setCnsResponsavel(json.get("cnsResponsavel").toString());
            pac.setCpfResponsavel(json.get("cpfResponsavel").toString());           
            pac.setNomeResponsavel(json.get("nomeResponsavel").toString());

            pacientesService.cadastrarPacientes(pessoasEnderecos, pac );


        } catch (Exception e) {
            return HttpStatus.BAD_REQUEST;
        }

        return HttpStatus.CREATED;
    }

还有我的服务....

@Transactional
    public void cadastrarPacientes( PessoasEnderecos pessoasEnderecos,  Pacientes pac) {
        pacRepository.saveAndFlush(pac);
--thispoint     pessoasEnderecosRepository.saveAndFlush(pessoasEnderecos);


    } 

我尝试调试并在 --thispoint 和 pacRepository 中放置了一个断点 但是断点没有到达--thispoint

我不得不说日志中没有发生任何错误。

这些方法有什么问题?

我从

中删除了这个 cascade = CascadeType.ALL
 @NotNull
        @JoinColumn(name="id_entidade")
        @ManyToOne(cascade = CascadeType.ALL)
        private Entidades entidade; 

我得到了他的新错误

List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=idPessoa, rootBeanClass=class digifred.model.global.Pessoas, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]] with root cause

javax.validation.ConstraintViolationException: Validation failed for classes [digifred.model.global.Pessoas] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=idPessoa, rootBeanClass=class digifred.model.global.Pessoas, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]

【问题讨论】:

  • 退出异常。
  • 可以添加文件配置吗?
  • try 可能会删除 try catch(异常 e)。也许那里隐藏了一些错误
  • 什么配置文件?我没有,因为使用 spring boot 和 sprign data jpa
  • 您使用的是什么“数据库”?您如何提供连接字符串?

标签: java spring jpa spring-boot spring-data


【解决方案1】:

问题

分离的实体

原因

尝试手动设置实体的id并使用该实体

可能的解决方案:

  1. merge/ 实体到当前的 PersistenceContext
  2. find 在这种情况下,id 的实体似乎更正确

假设 Municipios 的主键是long 那么

@PersistenceContext private EntityManager em; .. .. .. Long id = Long.parseLong(json.get("pessoasEnderecos").get("municipio")‌​.get("idMunicipio").‌​textValue()) Municipios municipios = em.find(Municipios.class, id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多