Error saving related entities - Unsave transient instance

1

A subsidiary has a product - relationship @OneToOne - and a product has several histories.

Implemented registration method:

public class CadastroProdutoService implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private Produtos produtos;

@Transactional
public void salvar(Produto produto) {
    Produto produtoExistente = produtos.porCodigo(produto);
    if (produtoExistente != null && !produtoExistente.equals(produto)) {
        produtos.remover(produtoExistente);

    }

    try {
        this.produtos.guardar(produto);
    } catch (OptimisticLockException e) {

        throw new NegocioException(FacesUtil.getMensagemI18n("concorrencia_familia"));

    }

}

}

The product table is as follows:

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

When product persists:

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

The following error occurs:

   Hibernate: 
    insert 
    into
        produto
        (codigoProduto, descricao, codigo_empresa, fatorAmortecimentoExponencial, codigo_filial, codigo_linha, quantidade_reais, quantidade_recente, valor, version) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
Hibernate: 
    insert 
    into
        historico
        (meses_historicos, id_produto, quantidade, version) 
    values
        (?, ?, ?, ?)
jun 07, 2017 9:47:43 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute
ADVERTÊNCIA: #{fileBean.send}: javax.persistence.RollbackException: Error while committing the transaction
javax.faces.FacesException: #{fileBean.send}: javax.persistence.RollbackException: Error while committing the transaction
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:96)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: javax.persistence.RollbackException: Error while committing the transaction
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
    ... 61 more
Caused by: javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
    at br.com.previsao.util.jpa.TransactionInterceptor.invoke(TransactionInterceptor.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.__invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
    at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:112)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:55)
    at br.com.previsao.service.CadastroProdutoService$Proxy$_$$_WeldSubclass.salvar(CadastroProdutoService$Proxy$_$$_WeldSubclass.java)
    at br.com.previsao.controller.FileBean.send(FileBean.java:204)
    at br.com.previsao.controller.FileBean$Proxy$_$$_WeldClientProxy.send(FileBean$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.__invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 62 more
Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.previsao.model.Produto.linha -> br.com.previsao.model.Linha
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1760)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:82)
    ... 89 more
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.previsao.model.Produto.linha -> br.com.previsao.model.Linha
    at org.hibernate.engine.spi.CascadingActions$8.noCascade(CascadingActions.java:398)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:129)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
    ... 89 more
    
asked by anonymous 07.06.2017 / 14:58

1 answer

1

Try changing this:

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

For this:

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "codigo_linha")
public Linha getLinha() {
    return linha;
}

Notice the differences in the annotation of @OneToOne .

    
07.06.2017 / 16:38