Fórum Salvar o id de um selectOneMenu em uma tabela relacionada Hibernate #445173

11/06/2013

0

Estou tentando persistir o valor do id de um selectOneMenu com JSF em uma tabela com relacionamento porém estou obtendo o seguinte erro:

SEVERE: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.sowg.modelo.Orcamento.idStatusOrcamento
	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
	at br.com.sowg.dao.OrcamentoDAO.adicionaOrcamento(OrcamentoDAO.java:39)
	at br.com.sowg.bean.OrcamentoBean.adicionaOrcamento(OrcamentoBean.java:99)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:528)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:248)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	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.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)




Esta é a minha view:

<?xml version='1.0' encoding='UTF-8' ?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
                xmlns:ui="http://java.sun.com/jsf/facelets"   
                xmlns:h="http://java.sun.com/jsf/html"  
                template="main.xhtml"  
                xmlns:f="http://java.sun.com/jsf/core">

    <ui:define name="main">
        <br/>
        <div class="container">
            <h:form id="formOrcamento" class="form-horizontal">

                <div class="control-group">
                    <div class="controls">
                        <legend class="titulo_form"><b>Pedido de orçamento</b></legend>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputCliente">Cliente</label>
                    <div class="controls">
                        <h:inputText value="#{orcamentoBean.nomeCliente}" class="input-xxlarge" id="inputCliente"/> <a href="#modalNovoCliente" role="button" data-toggle="modal">Novo</a>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputNomeProduto">Nome do produto</label>
                    <div class="controls">
                        <h:inputText value="#{orcamentoBean.produto.nome}" class="input-xxlarge" id="inputNomeProduto"/>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputTipoProduto">Tipo do produto</label>
                    <div class="controls">
                        <h:inputText value="#{orcamentoBean.produto.tipo}" class="input-xlarge" id="inputTipoProduto"/>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="selectMidia">Mídia</label>
                    <div class="controls">  
                        <h:selectOneMenu value="#{orcamentoBean.produto.idMidia}" converter="#"  id="selectMidia" class="input-xlarge">
                            <f:selectItems value="#{orcamentoBean.listMidias}" var="mi" itemLabel="#{mi.tamanho} - #{mi.tipo} - #{mi.gramatura}" itemValue="#{mi.idMidia}" />
                        </h:selectOneMenu> <a href="#modalNovaMidia" role="button" data-toggle="modal">Nova</a> 
                    </div>  
                </div>               

                <div class="control-group">  
                    <label class="control-label" for="selectImpressao">Impressão</label>
                    <div class="controls">  
                        <h:selectOneMenu value="#{orcamentoBean.produto.idImpressao}" converter="#"  id="selectImpressao" class="input-xlarge">
                            <f:selectItems value="#{orcamentoBean.listImpressoes}" var="imp" itemLabel="#{imp.tamanho} - #{imp.impressao}" itemValue="#{imp.idImpressao}" />
                        </h:selectOneMenu> <a href="#modalNovaImpressao" role="button" data-toggle="modal">Nova</a>
                    </div>  
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputTotalPaginas">Total de páginas</label>
                    <div class="controls">
                        <h:inputText value="#{orcamentoBean.produto.qtdPaginas}" class="input-mini" id="inputTotalPaginas"/>
                    </div>
                </div>

                <div class="control-group">  
                    <label class="control-label" for="chkAcabamento">Acabamento</label>  
                    <div class="controls">
                        <div class="container_acabamentos" style="border-radius: 5px; padding-left: 10px">
                            <label class="checkbox">
                                <h:selectManyCheckbox value="#{orcamentoBean.produto.acabamentoEmProdutoList}" layout="pageDirection">
                                    <f:selectItems value="#{orcamentoBean.listAcabamentos}" var="acab" itemLabel="#{acab.tipo}" itemValue="#{acab.idAcabamento}"/>
                                </h:selectManyCheckbox>
                            </label>
                        </div>  
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputDataEntrega">Data de entrega</label>
                    <div class="controls">
                        <h:inputText value="#{orcamentoBean.orcamento.dataEntrega}" class="input-medium" id="inputDataEntrega"/>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputObservacoes">Observações</label>
                    <div class="controls">
                        <h:inputTextarea value="#{orcamentoBean.orcamento.observacoes}" id="inputObservacoes" rows="3"/>
                    </div>
                </div>

                <div class="control-group">  
                    <label class="control-label" for="selectStatus">Status do orçamento</label>
                    <div class="controls">  
                        <h:selectOneMenu value="#{orcamentoBean.orcamento.idStatusOrcamento}" converter="#" id="selectStatus" class="input-xlarge">
                            <f:selectItems value="#{orcamentoBean.listStatus}" var="status" itemLabel="#{status.status}" itemValue="#{status.idStatusOrcamento}"/>
                        </h:selectOneMenu>
                    </div>  
                </div>
                <br/>
                <div class="control-group">
                    <label class="control-label"></label>
                    <div class="controls">
                        <legend></legend>
                        <h:commandButton value="Enviar" class="btn btn-primary" style="margin: 0 3px;"/>
                        <h:commandButton value="Salvar" action="#{orcamentoBean.adicionaOrcamento()}" class="btn" style="margin: 0 3px;">
                            <f:setPropertyActionListener target="#{orcamentoBean.idUsuario}" value="${sessionScope['usuarioId']}"/>
                            <f:setPropertyActionListener target="#{orcamentoBean.idEmpresa}" value="${sessionScope['empresaId']}"/>
                        </h:commandButton>
                        <h:commandButton value="Cancelar" class="btn" style="margin: 0 3px;"/>
                    </div>
                </div>
                
            </h:form>

            <!-- Modal Novo Cliente -->
            <div id="modalNovoCliente" class="modal hide fade">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4>Cadastrar novo cliente</h4>
                </div>
                <div class="modal-body">
                    <h:panelGrid columns="2" cellpadding="5">
                        <h:graphicImage value="images/question.png"/>
                        <h:outputText value="Que tipo de cliente você deseja cadastrar?"/>
                    </h:panelGrid>
                </div>
                <div class="modal-footer">
                    <a href="cadastro_cliente_pf.xhtml" class="btn">Pessoa Física</a>
                    <a href="cadastro_cliente_pj.xhtml" class="btn">Pessoa Jurídica</a>
                </div>
            </div>
            <!-- Modal -->

            <!-- Form modal Nova Midia -->
            <div id="modalNovaMidia" class="modal hide fade">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4>Nova Mídia</h4>
                </div>
                <div class="modal-body">
                    <h:form id="formMidia" class="form-horizontal">
                        <div class="control-group">
                            <label class="control-label" for="inputTipoMidia">Tipo</label>
                            <div class="controls">
                                <h:inputText value="#{midiaBean.midia.tipo}" class="input-medium" id="inputTipoMidia"/>
                            </div>
                        </div>

                        <div class="control-group">
                            <label class="control-label" for="inputTamanhoMidia">Tamanho</label>
                            <div class="controls">
                                <h:inputText value="#{midiaBean.midia.tamanho}" class="input-small" id="inputTamanhoMidia"/>
                            </div>
                        </div>

                        <div class="control-group">
                            <label class="control-label" for="inputGramaturaMidia">Gramatura</label>
                            <div class="controls">
                                <h:inputText value="#{midiaBean.midia.gramatura}" class="input-mini" id="inputGramaturaMidia"/>
                            </div>
                        </div>

                        <div class="control-group">
                            <label class="control-label" for="inputPrecoMidia">Preço</label>
                            <div class="controls">
                                <h:inputText value="#{midiaBean.midia.preco}" class="input-mini" id="inputPrecoMidia"/>
                            </div>
                        </div>

                        <div class="modal-footer">
                            <h:commandButton value="Salvar" action="#{midiaBean.adicionaMidia()}" class="btn btn-primary"/>
                            <a href="#" class="btn"  data-dismiss="modal">Cancelar</a>
                        </div>
                    </h:form>
                </div>
            </div>
            <!-- Modal -->

            <!-- Form modal Nova Impressao -->
            <div id="modalNovaImpressao" class="modal hide fade">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4>Nova Impressão</h4>
                </div>
                <div class="modal-body">
                    <h:form id="formImpressao" class="form-horizontal">
                        <div class="control-group">
                            <label class="control-label" for="inputTipoImpressao">Tipo</label>
                            <div class="controls">
                                <h:inputText value="#{impressaoBean.impressao.impressao}" class="input-medium" id="inputTipoImpressao"/>
                            </div>
                        </div>

                        <div class="control-group">
                            <label class="control-label" for="inputTamanhoMidia">Tamanho</label>
                            <div class="controls">
                                <h:inputText value="#{impressaoBean.impressao.tamanho}" class="input-small" id="inputTamanhoMidia"/>
                            </div>
                        </div>

                        <div class="control-group">
                            <label class="control-label" for="inputPrecoImpressao">Preço</label>
                            <div class="controls">
                                <h:inputText value="#{impressaoBean.impressao.valor}" class="input-mini" id="inputPrecoImpressao"/>
                            </div>
                        </div>

                        <div class="modal-footer">
                            <h:commandButton value="Salvar" action="#{impressaoBean.adicionaImpressao()}" class="btn btn-primary"/>
                            <a href="#" class="btn"  data-dismiss="modal">Cancelar</a>
                        </div>
                    </h:form>
                </div>
            </div>
            <!-- Modal -->
        </div>
        
         <script>
            jQuery(function($) {
                $("#formOrcamento\\:inputDataEntrega").mask("99/99/9999");
            });
        </script>

    </ui:define>
</ui:composition>


Minha Classe Bean:

package br.com.sowg.bean;

import br.com.sowg.dao.AcabamentoDAO;
import br.com.sowg.dao.ImpressaoDAO;
import br.com.sowg.dao.MidiaDAO;
import br.com.sowg.dao.OrcamentoDAO;
import br.com.sowg.dao.StatusOrcamentoDAO;
import br.com.sowg.modelo.Acabamento;
import br.com.sowg.modelo.Cliente;
import br.com.sowg.modelo.Empresa;
import br.com.sowg.modelo.Impressao;
import br.com.sowg.modelo.Midia;
import br.com.sowg.modelo.Orcamento;
import br.com.sowg.modelo.Produto;
import br.com.sowg.modelo.StatusOrcamento;
import br.com.sowg.modelo.Usuario;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import lombok.Getter;
import lombok.Setter;

@ManagedBean
@ViewScoped
public class OrcamentoBean {

    AcabamentoDAO acabamentoDAO = new AcabamentoDAO();
    StatusOrcamentoDAO statusDAO = new StatusOrcamentoDAO();
    MidiaDAO midiaDAO = new MidiaDAO();
    ImpressaoDAO impressaoDAO = new ImpressaoDAO();
    @Getter
    @Setter
    Orcamento orcamento = new Orcamento();
    @Getter
    @Setter
    Empresa empresa = new Empresa();
    @Getter
    @Setter
    Produto produto = new Produto();
    @Getter
    @Setter
    Midia midia = new Midia();
    @Getter
    @Setter
    Usuario usuario = new Usuario();
    @Getter
    @Setter
    private Object idUsuario = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("idUsuario");
    @Getter
    @Setter
    private Object idEmpresa = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("idEmpresa");
    @Getter
    @Setter
    private int idCliente;
    @Getter
    @Setter
    Cliente cliente;
    @Getter
    @Setter
    String nomeCliente;
    @Getter
    @Setter
    private Acabamento acabamento = new Acabamento();
    @Getter
    @Setter
    List<Acabamento> listAcabamentos;
    @Getter
    @Setter
    List<Acabamento> listAcabamentosSelecionados;
    @Getter
    @Setter
    List<StatusOrcamento> listStatus;
    @Getter
    @Setter
    List<Midia> listMidias;
    @Getter
    @Setter
    List<Impressao> listImpressoes;

    @PostConstruct
    public void postConstruct() {
        load();
    }

    protected void load() {
        listAcabamentos = acabamentoDAO.findAll();
        listStatus = statusDAO.findAll();
        listMidias = midiaDAO.findAll();
        listImpressoes = impressaoDAO.findAll();
    }

    public void adicionaOrcamento() {
        OrcamentoDAO orcDao = new OrcamentoDAO();
        orcDao.adicionaOrcamento(orcamento, idUsuario, idEmpresa, nomeCliente);
        orcamento = new Orcamento();
    }
}



Mniha classeDAO:

package br.com.sowg.dao;

import br.com.sowg.modelo.Cliente;
import br.com.sowg.modelo.Empresa;
import br.com.sowg.modelo.Orcamento;
import br.com.sowg.modelo.StatusOrcamento;
import br.com.sowg.modelo.Usuario;
import br.com.sowg.util.HibernateUtil;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class OrcamentoDAO {

    private Session sessao;
    private Transaction trans;
    
    @Getter
    @Setter
    private Cliente cli;
    
    ClienteDAO clienteDAO = new ClienteDAO();

    public void adicionaOrcamento(Orcamento orc, Object idUser, Object idEmp, String nomeCliente) {

        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans = sessao.beginTransaction();
            
            cli = clienteDAO.findByName(nomeCliente);
            orc.setIdCliente(cli);
            orc.setIdEmpresa(cli.getIdEmpresa());

            Date data = new Date();
            orc.setData(data);
            
            sessao.save(orc);
            trans.commit();

        } catch (Exception e) {
            e.printStackTrace();
            sessao.beginTransaction().rollback();
        } finally {
            sessao.close();
        }
    }
}



E por fim minha classeModelo

package br.com.sowg.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Entity
@Table(name = "orcamento")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Orcamento.findAll", query = "SELECT o FROM Orcamento o"),
    @NamedQuery(name = "Orcamento.findByIdOrcamento", query = "SELECT o FROM Orcamento o WHERE o.idOrcamento = :idOrcamento"),
    @NamedQuery(name = "Orcamento.findByData", query = "SELECT o FROM Orcamento o WHERE o.data = :data"),
    @NamedQuery(name = "Orcamento.findByValorTotal", query = "SELECT o FROM Orcamento o WHERE o.valorTotal = :valorTotal"),
    @NamedQuery(name = "Orcamento.findByDataEntrega", query = "SELECT o FROM Orcamento o WHERE o.dataEntrega = :dataEntrega"),
    @NamedQuery(name = "Orcamento.findByObservacoes", query = "SELECT o FROM Orcamento o WHERE o.observacoes = :observacoes")})
public class Orcamento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_orcamento")
    private Integer idOrcamento;
    @Column(name = "data")
    @Temporal(TemporalType.DATE)
    private Date data;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "valor_total")
    private BigDecimal valorTotal;
    @Size(max = 25)
    @Column(name = "data_entrega")
    private String dataEntrega;
    @Size(max = 180)
    @Column(name = "observacoes")
    private String observacoes;
    @JoinColumn(name = "id_cliente", referencedColumnName = "id_cliente")
    @ManyToOne(optional = false)
    private Cliente idCliente;
    @JoinColumn(name = "id_empresa", referencedColumnName = "id_empresa")
    @ManyToOne(optional = false)
    private Empresa idEmpresa;
    @JoinColumn(name = "id_status_orcamento", referencedColumnName = "id_status_orcamento")
    @ManyToOne(optional = false)
    private StatusOrcamento idStatusOrcamento;
    @JoinColumn(name = "id_usuario", referencedColumnName = "id_usuario")
    @ManyToOne(optional = false)
    private Usuario idUsuario;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idOrcamento")
    private List<OrdemServico> ordemServicoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "orcamento")
    private List<ProdutoOrcado> produtoOrcadoList;

    public Orcamento() {
    }

    public Orcamento(Integer idOrcamento) {
        this.idOrcamento = idOrcamento;
    }

    public Integer getIdOrcamento() {
        return idOrcamento;
    }

    public void setIdOrcamento(Integer idOrcamento) {
        this.idOrcamento = idOrcamento;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public BigDecimal getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(BigDecimal valorTotal) {
        this.valorTotal = valorTotal;
    }

    public String getDataEntrega() {
        return dataEntrega;
    }

    public void setDataEntrega(String dataEntrega) {
        this.dataEntrega = dataEntrega;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    public Cliente getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Cliente idCliente) {
        this.idCliente = idCliente;
    }

    public Empresa getIdEmpresa() {
        return idEmpresa;
    }

    public void setIdEmpresa(Empresa idEmpresa) {
        this.idEmpresa = idEmpresa;
    }

    public StatusOrcamento getIdStatusOrcamento() {
        return idStatusOrcamento;
    }

    public void setIdStatusOrcamento(StatusOrcamento idStatusOrcamento) {
        this.idStatusOrcamento = idStatusOrcamento;
    }

    public Usuario getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(Usuario idUsuario) {
        this.idUsuario = idUsuario;
    }

    @XmlTransient
    public List<OrdemServico> getOrdemServicoList() {
        return ordemServicoList;
    }

    public void setOrdemServicoList(List<OrdemServico> ordemServicoList) {
        this.ordemServicoList = ordemServicoList;
    }

    @XmlTransient
    public List<ProdutoOrcado> getProdutoOrcadoList() {
        return produtoOrcadoList;
    }

    public void setProdutoOrcadoList(List<ProdutoOrcado> produtoOrcadoList) {
        this.produtoOrcadoList = produtoOrcadoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idOrcamento != null ? idOrcamento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orcamento)) {
            return false;
        }
        Orcamento other = (Orcamento) object;
        if ((this.idOrcamento == null && other.idOrcamento != null) || (this.idOrcamento != null && !this.idOrcamento.equals(other.idOrcamento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.sowg.modelo.Orcamento[ idOrcamento=" + idOrcamento + " ]";
    }
    
}



Ja estou a uma semana nisso e não consigo descobri a causa.

Obrigado
Ti9 Ltda

Ti9 Ltda

Responder

Posts

12/06/2013

Eduardo Pessoa

alguem com conhecimento em java poderia ajudar o nosso amigo.
Responder

Gostei + 0

12/06/2013

Ti9 Ltda

Ninguém nunca passou por isso? Acho que o Converter não esta surtindo efeito no meu selecOneMenu, dai então ele não seta o valor na proriedade do meu Bean.

Alguém help
Responder

Gostei + 0

15/06/2013

Marcelo Senaga

SEVERE: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.sowg.modelo.Orcamento.idStatusOrcamento
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)

O problema é no hibernate. Poste o código da classe Orcamento. E como ela está definida no banco de dados? O id dela é auto-incremento?
Responder

Gostei + 0

08/07/2013

Ti9 Ltda

Problema resolvido.
Era minha classe Converter que estava erra. Quem tiver o mesmo problema, segue o código da classe Converter.
package br.com.sowg.converter;

import br.com.sowg.modelo.StatusOrcamento;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@ManagedBean
@ViewScoped
@FacesConverter(value = "statusOrcamentoConverter")
public class StatusOrcamentoConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        if (value != null) {
            return this.getAttributesFrom(component).get(value);
        }
        return null;
    }

    @Override
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        if (value != null && !"".equals(value)) {
            StatusOrcamento status = (StatusOrcamento) value;
            this.addAttribute(component, status);
            Integer codigo = status.getIdStatusOrcamento();
            if (codigo != null) {
                return String.valueOf(codigo);
            }
        }
        return (String) value;
    }

    protected void addAttribute(UIComponent component, StatusOrcamento o) {
        String key = o.getIdStatusOrcamento().toString();
        this.getAttributesFrom(component).put(key, o);
    }

    protected Map<String, Object> getAttributesFrom(UIComponent component) {
        return component.getAttributes();
    }
}
Responder

Gostei + 0

08/07/2013

Marcelo Senaga

Show!
E obrigado por postar a solução.
Responder

Gostei + 0

17/07/2013

José

Já que a duvida foi sanada, e a solução compartilhada. Estou dando o tópico por concluído.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar