Spring Boot主表ID无法保存到子表字段问题求助
问题:Caixa主表ID无法保存到CaixaMeiosPagamentos子表关联字段
我实现了public CaixaMovimentos createCaixaMovimentos(CaixaMovimentos caixaMovimentos)方法,但无法将主表Caixa的ID保存到子表CaixaMeiosPagamentos的关联字段中,尝试多种方案均无效。控制台日志显示Caixa的ID已正确获取(如输出id novo 4、id 4),但数据库中子表的关联字段为空。
相关实体类与服务类代码
Caixa 实体类
@Entity(name = "caixa") public class Caixa { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; public String getEmpresaCnpj() { return empresaCnpj; } public void setEmpresaCnpj(String empresaCnpj) { this.empresaCnpj = empresaCnpj; } @JoinColumn(name = "empresa_cnpj", referencedColumnName = "cnpj", foreignKey = @ForeignKey(name = "fk_caixa_empresa_cnpj")) private String empresaCnpj; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } @Column(name = "nome") private String nome; public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
CaixaMeiosPagamentos 实体类
@Entity(name = "caixa_meios_pagamentos") public class CaixaMeiosPagamentos { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "caixa_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "meios_pagtos_caixa")) private Caixa caixa; @JsonBackReference @ManyToOne @JoinColumn(name = "caixa_mov_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "meios_pagtos_caixa_mov")) private CaixaMovimentos caixaMovimentos; public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public BigDecimal getValorTotal() { return valorTotal; } public void setValorTotal(BigDecimal valorTotal) { this.valorTotal = valorTotal; } @Column( name = "descricao", nullable = false) private String descricao; @Column(name = "valor_total") private BigDecimal valorTotal; public Caixa getCaixa() { return caixa; } public void setCaixa(Caixa caixa) { this.caixa = caixa; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public CaixaMovimentos getCaixaMovimentos() { return caixaMovimentos; } public void setCaixaMovimentos(CaixaMovimentos caixaMovimentos) { this.caixaMovimentos = caixaMovimentos; } }
MovimentosService 服务类
@Service public class MovimentosService { private final MovimentosRepository movimentosRepository; private final CaixaService caixaService; public MovimentosService(MovimentosRepository movimentosRepository, CaixaService caixaService) { this.movimentosRepository = movimentosRepository; this.caixaService = caixaService; } public List<CaixaMovimentos> getAllCaixasMovimentos() { return movimentosRepository.findAll(); } public Optional<CaixaMovimentos> getCaixaMovimentosById(Long id) { return movimentosRepository.findById(id); } public List<CaixaMovimentos>getCaixaMovimentosByData(LocalDate dataInicial , LocalDate dataFinal) { List <CaixaMovimentos> caixaMovimentos = movimentosRepository.findByDataMovBetween(dataInicial, dataFinal); return caixaMovimentos; } public CaixaMovimentos createCaixaMovimentos(CaixaMovimentos caixaMovimentos){ Optional<Caixa> existingCaixa = caixaService.findCaixaByCnpj(caixaMovimentos.getCaixa().getEmpresaCnpj()); CaixaMovimentos newCaixaMov = new CaixaMovimentos(); newCaixaMov.setDataMov(caixaMovimentos.getDataMov()); newCaixaMov.setNomeUsu(caixaMovimentos.getNomeUsu()); if( existingCaixa.isPresent() ) { System.out.println("id " +existingCaixa.get().getId() ); newCaixaMov.setCaixa(existingCaixa.get()); }else { Caixa newCaixa = caixaService.createCaixa(caixaMovimentos.getCaixa()); newCaixaMov.setCaixa(newCaixa); } newCaixaMov.setCaixaMeiosPagamentos(caixaMovimentos.getCaixaMeiosPagamentos()); System.out.println("id novo " + newCaixaMov.getCaixa().getId() ); return movimentosRepository.save(newCaixaMov); }; public Optional<CaixaMovimentos> updateCaixaMovimentos(long id, CaixaMovimentos caixaMovimentos) { return movimentosRepository.findById(id).map(movimento ->{ movimento.setNomeUsu(caixaMovimentos.getNomeUsu()); movimento.setCaixa(caixaMovimentos.getCaixa()); movimento.setDataMov(caixaMovimentos.getDataMov()); movimento.setCaixaMeiosPagamentos( caixaMovimentos.getCaixaMeiosPagamentos()); return movimentosRepository.save(movimento); }) ; } public boolean deteleCaixaMovimentos(long id) { return movimentosRepository.findById(id).map( existingMovimento ->{ movimentosRepository.delete(existingMovimento); return true; }).orElse(false); } }
CaixaMovimentos 实体类
@Entity(name = "caixa_mov") public class CaixaMovimentos { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(referencedColumnName = "id", foreignKey = @ForeignKey(name = "caixa_mov_caixa")) private Caixa caixa; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Caixa getCaixa() { return caixa; } public void setCaixa(Caixa caixa) { this.caixa = caixa; } public LocalDate getDataMov() { return dataMov; } public void setDataMov(LocalDate dataMov) { this.dataMov = dataMov; } @Column(name = "data_mov") private LocalDate dataMov; public String getNomeUsu() { return nomeUsu; } public void setNomeUsu(String nomeUsu) { this.nomeUsu = nomeUsu; } @Column(name = "nome_usu") private String nomeUsu; public Set<CaixaMeiosPagamentos> getCaixaMeiosPagamentos() { return caixaMeiosPagamentos; } public void setCaixaMeiosPagamentos(Set<CaixaMeiosPagamentos> caixaMeiosPagamentos) { this.caixaMeiosPagamentos = caixaMeiosPagamentos; } @OneToMany(mappedBy = "caixaMovimentos", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) Set<CaixaMeiosPagamentos> caixaMeiosPagamentos; }
相关截图


内容的提问来源于stack exchange,提问作者Gilmar
相关产品推荐
相关产品推荐

