Erro ao salvar entidades relacionadas - Unsave transient instance

0 respostas
jpajava
rafael_moreira1

Uma filial posui um produto - relacionamento @OneToOne - e um produto possui vários históricos.

A tabela produto é a seguinte:

public class Produto implements Serializable {

private static final long serialVersionUID = 1L;
public final static String ALL = "produto.populaproduto";
public final static String COUNT = "produto.countprodutoTotal";
public final static String DESCRICAO = "produto.descricao";

private Long codigo;

private Integer Version;

private String codigoProduto;

private String descricao;

private BigDecimal valor;

private Empresa empresa;

private Linha linha;

private Usuario gerenteFilial;

private Double fatorAmortecimentoExponencial;

private Long quantidadeRecente;

private BigDecimal quantidadeReais;

private List<Historico> historicos = new ArrayList<>();

@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
public List<Historico> getHistoricos() {
    return historicos;
}

public void setHistoricos(List<Historico> historicos) {
    this.historicos = historicos;
}

public Produto() {
}

public Produto(String codigoProduto, String descricao, BigDecimal valor) {
    this.codigoProduto = codigoProduto;
    this.descricao = descricao;
    this.valor = valor;
}

@Version
public Integer getVersion() {
    return Version;
}

public void setVersion(Integer version) {
    Version = version;
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getCodigo() {
    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

@NotBlank
@Column(nullable = false, length = 50)
public String getCodigoProduto() {
    return codigoProduto;
}

public void setCodigoProduto(String codigoProduto) {
    this.codigoProduto = codigoProduto;
}

public void setDescricao(String descricao) {
    this.descricao = descricao == null ? null : descricao.toUpperCase().trim();

}

@NotBlank
@Column(nullable = false, length = 100)
public String getDescricao() {
    return descricao;
}

@Column(name = "valor", nullable = false, precision = 10, scale = 2)
public BigDecimal getValor() {
    return valor;
}

public void setValor(BigDecimal valor) {
    this.valor = valor;
}

@Column(name = "fatorAmortecimentoExponencial", nullable = true, precision = 10, scale = 2)
public Double getFatorAmortecimentoExponencial() {
    return fatorAmortecimentoExponencial;
}

public void setFatorAmortecimentoExponencial(Double fatorAmortecimentoExponencial) {
    this.fatorAmortecimentoExponencial = fatorAmortecimentoExponencial;
}

@Column(name = "quantidade_recente")
public Long getQuantidadeRecente() {
    return quantidadeRecente;
}

public void setQuantidadeRecente(Long quantidadeRecente) {
    this.quantidadeRecente = quantidadeRecente;
}

@Column(name = "quantidade_reais", nullable = true, precision = 10, scale = 2)
public BigDecimal getQuantidadeReais() {
    return quantidadeReais;
}

public void setQuantidadeReais(BigDecimal quantidadeReais) {
    this.quantidadeReais = quantidadeReais;
}

@ManyToOne
@JoinColumn(name = "codigo_empresa")
public Empresa getEmpresa() {
    return empresa;
}

public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
}

@OneToOne
@JoinColumn(name = "codigo_linha")
public Linha getLinha() {
    return linha;
}

public void setLinha(Linha linha) {
    this.linha = linha;
}

@ManyToOne
@JoinColumn(name = "codigo_filial")
public Usuario getGerenteFilial() {
    return gerenteFilial;
}

public void setGerenteFilial(Usuario gerenteFilial) {
    this.gerenteFilial = gerenteFilial;
}

Ao persistir produto:

Double alfa = BigDecimal.valueOf((fatorAmortecimentoExponencial(arrayComUltimosCincoMeses)))
.setScale(3, RoundingMode.HALF_UP).doubleValue();

System.out.println("Alfa " + alfa);
            System.out.println("Melhor taxa: " + alfa + " - resultado: "
                    + Math.round(calculoPrevisao(alfa.doubleValue(), arrayComQuantidades)));
            Long previsao = Math.round(calculoPrevisao(alfa.doubleValue(), arrayComQuantidades));

            listaComCincoUltimosMeses.clear();
            listaComQuantidade.clear();
            prod.setEmpresa(empresaSelecionada);
            prod.setGerenteFilial(gerenteFilial);
            prod.setFatorAmortecimentoExponencial(alfa);
            prod.setQuantidadeRecente(previsao);
            prod.setQuantidadeReais(prod.getValor().multiply(new BigDecimal(previsao)));
            cadastroProdutoService.salvar(prod);// persistir após
                                                // calcular o
                                                // alfa

Ocorre o seguinte erro:

object references an unsaved transient instance - save the transient instance before flushing : br.com.previsao.model.Produto.linha -> br.com.previsao.model.Linha

Criado 7 de junho de 2017
Respostas 0
Participantes 1