我在关系中保存数据时遇到问题,我正在使用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;
答案 0 :(得分:0)
分离实体
尝试手动设置实体的ID并使用此实体
merge/
实体到当前PersistenceContext 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);