数据不保存到数据库Spring启动

时间:2017-11-28 16:41:53

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

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

我会告诉你我的关系课程。

web.config

//获取并设置

类Pessoas

@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() {
    }

//获取并设置

类PessoasEnderecos

@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() {
    }

//获取并设置

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

我开始的json的例子

@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() {
    }

@

{
    "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;
    }

我尝试调试,并在--thispoint和@Transactional public void cadastrarPacientes( PessoasEnderecos pessoasEnderecos, Pacientes pac) { pacRepository.saveAndFlush(pac); --thispoint pessoasEnderecosRepository.saveAndFlush(pessoasEnderecos); } 中放置了一个breakPoint 但是断点没有到达 - 这个点

我不得不说日志中没有出现任何错误。

这些方法有什么不对?

我从

中删除了此pacRepository
cascade = CascadeType.ALL

我得到了新的错误

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

1 个答案:

答案 0 :(得分:0)

问题

分离实体

原因

尝试手动设置实体的ID并使用此实体

可能的解决方案:

  1. merge/实体到当前PersistenceContext
  2. find在这种情况下,id的实体似乎更正确
  3. 假设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);