admin管理员组

文章数量:1123347

I have theses classes and this method public CaixaMovimentos createCaixaMovimentos(CaixaMovimentos caixaMovimentos) dont work to save id master into details fields.

i tried severas tips and dont work, is are ok joined.

in console log id ok into classes: id novo 4 id 4 id novo 4.

all classes are listed bellow

@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;
    }


}

    
@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;
    }
}

    

    @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);
    }
}


@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;

}

I have theses classes and this method public CaixaMovimentos createCaixaMovimentos(CaixaMovimentos caixaMovimentos) dont work to save id master into details fields.

i tried severas tips and dont work, is are ok joined.

in console log id ok into classes: id novo 4 id 4 id novo 4.

all classes are listed bellow

@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;
    }


}

    
@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;
    }
}

    

    @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);
    }
}


@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;

}

Share Improve this question asked 13 hours ago GilmarGilmar 415 bronze badges 0
Add a comment  | 

1 Answer 1

Reset to default 0

You have to review cascade properties between CaixaMovimentos and Caixa entries, by removing cascade = CascadeType.ALL from @ManyToOne in CaixaMovimentos and instead add @OneToMany(cascade = CascadeType.ALL) to Caixa. More explanation you can find here

@Entity(name = "caixa_mov")
public class CaixaMovimentos {
 //other fileds
 
    @ManyToOne
    @JoinColumn(referencedColumnName = "id", foreignKey = @ForeignKey(name = "caixa_mov_caixa"))
    private Caixa caixa;
//other fields , getters, setters
@Entity(name = "caixa")
public class Caixa {
 //other fileds
 
   @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private List<CaixaMovimentos> caixaMovimentos = new ArrayList<>();
//other fields , getters, setters

本文标签: Spring boot dont save id master into details fieldsStack Overflow