Salvar o id de um selectOneMenu em uma tabela relacionada Hibernate
Estou tentando persistir o valor do id de um selectOneMenu com JSF em uma tabela com relacionamento porém estou obtendo o seguinte erro:
Esta é a minha view:
Minha Classe Bean:
Mniha classeDAO:
E por fim minha classeModelo
Ja estou a uma semana nisso e não consigo descobri a causa.
Obrigado
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
Curtidas 0
Respostas
Eduardo Pessoa
11/06/2013
alguem com conhecimento em java poderia ajudar o nosso amigo.
GOSTEI 0
Ti9 Ltda
11/06/2013
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
Alguém help
GOSTEI 0
Marcelo Senaga
11/06/2013
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?
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?
GOSTEI 0
Ti9 Ltda
11/06/2013
Problema resolvido.
Era minha classe Converter que estava erra. Quem tiver o mesmo problema, segue o código da classe Converter.
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();
}
}
GOSTEI 0
Marcelo Senaga
11/06/2013
Show!
E obrigado por postar a solução.
E obrigado por postar a solução.
GOSTEI 0
José
11/06/2013
Já que a duvida foi sanada, e a solução compartilhada. Estou dando o tópico por concluído.
GOSTEI 0