Olá galera, eu vi que há fórum sobre hibernate e desenvolvimento web dai fiquei na duvida onde colocar a duvida, acabei colocando no desenvolvimento web.
É o seguinte eu tenho um método na minha classe controller consultaHQL. Ele retorna um inteiro. Abaixo está o código da classe inteira:
[code]@ManagedBean
@SessionScoped
public class ItemVendaBean implements Serializable{
private ItemVenda itemvenda = new ItemVenda();
private List itemvendas = new ArrayList();
private ItemVendaDao dao = new ItemVendaDaoImpl();
public ItemVendaBean(){
itemvendas = dao.consultar();
}
public void salvar(ActionEvent event) {
dao.save(itemvenda);
itemvenda = new ItemVenda();
itemvendas = dao.consultar();
}
public void editar() {
itemvenda = dao.getById(itemvenda.getId());
}
public void excluir() {
dao.delete(itemvenda);
itemvendas = dao.consultar();
}
public ItemVenda getItemVenda() {
return itemvenda;
}
public void setItemVenda(ItemVenda itemvenda) {
this.itemvenda = itemvenda;
}
public List getItemVendas() {
return itemvendas;
}
public void setItemVendas(List itemvendas) {
this.itemvendas = itemvendas;
}
public int consultaHQL(){
List lista = (List) dao.consultaHQL("select max(venda.id) from Venda venda");
int valor;
if(lista.isEmpty()){
return 0;
}else{
valor = (int)lista.get(0);
return valor;
}
}
}
[/code]
essa é a classe controller. Agora tenho o .xhtml. Vou colocar a parte que está dando erro somente.
<p:dialog id="modalDialogItemVenda" width="500" resizable="no" widgetVar="cadastrarItemVenda" header="CADASTRAR ITENS DE VENDA" modal="true" height="500">
<h:form id="formCadastroItemVenda">
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Produto:" for="produto"/>
<p:selectOneMenu value="#{itemVendaBean.itemVenda.produto}" converter="bancoConverter" >
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.produtos}" var="itens" itemValue="#{itens}" itemLabel="#{itens.nome}"/>
</p:selectOneMenu>
<p:inputText id="pre" value="#{itemVendaBean.consultaHQL()}" />
</h:panelGrid>
<p:commandButton id="btnSalvarItemVenda" value="ADICIONAR" actionListener="#{itemVendaBean.salvar}"/>
<p:commandButton id="FinalizarItemVenda" value="FINALIZAR" oncomplete="formCadastroDetalheVenda.show()"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="cadastrarItemVenda.hide()"/>
</h:form>
</p:dialog>
Quando executo o programa dá o seguinte erro:
02-Apr-2014 08:38:16.610 SEVERE [http-nio-8084-exec-16] com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError javax.el.PropertyNotFoundException: /Venda.xhtml @62,89 value="#{itemVendaBean.consultaHQL()}": Property 'consultaHQL' not found on type controller.ItemVendaBean
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:124)
at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:183)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046)
at javax.faces.component.UIInput.validate(UIInput.java:976)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1249)
at javax.faces.component.UIInput.processValidators(UIInput.java:712)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:368)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1258)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: javax.el.PropertyNotFoundException: Property 'consultaHQL' not found on type controller.ItemVendaBean
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:259)
at javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:236)
at javax.el.BeanELResolver.property(BeanELResolver.java:346)
at javax.el.BeanELResolver.getType(BeanELResolver.java:82)
at com.sun.faces.el.DemuxCompositeELResolver._getType(DemuxCompositeELResolver.java:215)
at com.sun.faces.el.DemuxCompositeELResolver.getType(DemuxCompositeELResolver.java:242)
at org.apache.el.parser.AstValue.getType(AstValue.java:58)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:171)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
... 42 more
Já procurei como resolver isso em vários lugares e nada. Uma outra duvida. Esse método retorna um id. Como faço para preencher o atributo venda que é esse: itemVendaBean.venda.venda.
Obrigado pela ajuda.
Você está chamando consultaHQL dentro de um value no seu xhtml, logo ele interpreta consultaHQL como uma propiedade, não um método. Nesse caso, você assinar os métodos como getConsultaHQL e setConsultaHQL, ou passar o resultado da consulta para um int e ter um get/set para esse int no managedBean.
Eu fiz isso então, criei um atributo código e montei os get e set dele desse jeito:
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
List lista = (List) dao.consultaHQL("select max(venda.id) from Venda venda");
int valor;
if(lista.isEmpty()){
this.codigo = 0;
}else{
valor = (int)lista.get(0);
this.codigo = valor;
}
}
Está certo?
O contrário. Essa lógica aí você coloca dentro do Get e no set deixa normal.
Na pagina eu recomendo deixar esse input como desabilitado.
Editi: Na verdade, se deixar só o get com essa lógica, não criar o set e na pagina você usa outputText, ja que não é para o usuário digitar esse valor mesmo.
Eu mudei algumas coisas no código. Agora consigo pegar o id da venda. Só que quando seleciono uma outra venda aparece id da outra venda selecionada. Abaixo está o código do controller:
@ManagedBean
@SessionScoped
public class ItemVendaBean implements Serializable{
private ItemVenda itemvenda = new ItemVenda();
private List itemvendas = new ArrayList();
private ItemVendaDao dao = new ItemVendaDaoImpl();
private Venda venda = new Venda();
private List vendas = new ArrayList();
private VendaDao vendadao = new VendaDaoImpl();
private int codigo;
public ItemVendaBean(){
itemvendas = dao.consultar();
}
public void salvar(ActionEvent event) {
dao.save(itemvenda);
itemvenda = new ItemVenda();
itemvendas = dao.consultar();
}
public void idvenda(){
venda = vendadao.getById(venda.getId());
}
public void editar() {
itemvenda = dao.getById(itemvenda.getId());
}
public void excluir() {
dao.delete(itemvenda);
itemvendas = dao.consultar();
}
public ItemVenda getItemVenda() {
return itemvenda;
}
public void setItemVenda(ItemVenda itemvenda) {
this.itemvenda = itemvenda;
}
public List getItemVendas() {
return itemvendas;
}
public void setItemVendas(List itemvendas) {
this.itemvendas = itemvendas;
}
public Venda getVenda() {
return venda;
}
public void setVenda(Venda venda) {
this.venda = venda;
}
public List getVendas() {
return vendas;
}
public void setVendas(List vendas) {
this.vendas = vendas;
}
public VendaDao getVendadao() {
return vendadao;
}
public void setVendadao(VendaDao vendadao) {
this.vendadao = vendadao;
}
}
Agora segue o arquivo .xhtml:
<?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 template="/Layout/Template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="conteudo">
<h:body>
<h:form style="border: #999999;">
<p></p>
<p:commandButton id="btnAbrirCadastroVenda" value="Abrir Cadastro" oncomplete="cadastrarVenda.show()"/>
</h:form>
<h:form id="formListar" style="border: #999999;">
<p:dataTable id="tabela" selectionMode="single" selection="#{vendaBean.venda}" rowKey="#{vend.id}" value="#{vendaBean.vendas}" var="vend" emptyMessage="Nenhum registro incluido." paginator="true" rows="10">
<f:facet name="header">
LISTA DE VENDAS
</f:facet>
<p:column headerText="DATA REALIZADA" style="text-align: center">
<h:outputText value="#{vend.datarealizada}" />
</p:column>
<p:column headerText="ADICIONAR ITENS E DETALHES À VENDA" style="text-align: center">
<p:commandButton action="#{itemVendaBean.idvenda}" value="ADICIONAR ITEM A VENDA" title="Adicionar Item à venda" onclick="cadastrarItemVenda.show()" update=":formCadastroItemVenda"/>
<p:commandButton value="DETALHAR VENDA" title="Detalhar Venda" onclick="cadastrarDetalheVenda.show()" update=":formCadastroDetalheVenda"/>
</p:column>
<p:column headerText="ALTERAR - EXCLUIR" style="text-align: center">
<p:commandButton action="#{vendaBean.editar}" value="EDITAR" title="Editar" onclick="cadastrarVenda.show()" update=":formCadastroVenda"/>
<p:commandButton value="EXCLUIR" title="Excluir" onclick="confirmation.show()" style="margin-left: 5px" >
<f:setPropertyActionListener value="#{vend}" target="#{vendaBean.venda}" />
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<h:form id="dlg">
<p:confirmDialog message="Deseja realmente excluir este registro?" hideEffect="explode" header="Aviso" severity="alert" widgetVar="confirmation">
<p:commandButton id="btnSim" value="Sim" oncomplete="confirmation.hide();" actionListener="#{vendaBean.excluir}" process="@(formListar)" update=":formListar:tabela"/>
<p:commandButton id="btnNao" value="Não" onclick="confirmation.hide();" type="button"/>
</p:confirmDialog>
</h:form>
<p:dialog id="modalDialog" width="500" resizable="no" widgetVar="cadastrarVenda" header="CADASTRAR VENDA" modal="true" height="500">
<h:form id="formCadastroVenda">
<p:messages id="msgs" autoUpdate="true"/>
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Data Realizada:" for="datarealizada"/>
<p:calendar value="#{vendaBean.venda.datarealizada}" id="popupCal"/>
<h:outputLabel value="Observação:" for="observacao"></h:outputLabel>
<p:inputTextarea id="observacao" label="observacao" value="#{vendaBean.venda.observacao}"/>
</h:panelGrid>
<p:commandButton id="btnSalvar" value="SALVAR" actionListener="#{vendaBean.salvar}" update="formCadastroVenda: msgs" oncomplete="cadastrarItemVenda.show()"/>
<p:commandButton id="btnNovo" value="NOVO" type="reset"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="cadastrarVenda.hide()" update=":formListar:tabela"/>
</h:form>
</p:dialog>
<p:dialog id="modalDialogItemVenda" width="500" resizable="no" widgetVar="cadastrarItemVenda" header="CADASTRAR ITENS DE VENDA" modal="true" height="500">
<h:form id="formCadastroItemVenda">
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Produto:" for="produto"/>
<p:selectOneMenu value="#{itemVendaBean.itemVenda.produto}" converter="bancoConverter" >
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.produtos}" var="itens" itemValue="#{itens}" itemLabel="#{itens.nome}"/>
</p:selectOneMenu>
<p:inputText id="pre" value="#{vendaBean.venda.id}" />
</h:panelGrid>
<p:commandButton id="btnSalvarItemVenda" value="ADICIONAR" actionListener="#{itemVendaBean.salvar}"/>
<p:commandButton id="FinalizarItemVenda" value="FINALIZAR" oncomplete="formCadastroDetalheVenda.show()"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="cadastrarItemVenda.hide()"/>
</h:form>
</p:dialog>
<p:dialog id="modalDialogDetalheVenda" width="500" resizable="no" widgetVar="cadastrarDetalheVenda" header="CADASTRAR DETALHES DA VENDA" modal="true" height="500">
<h:form id="formCadastroDetalheVenda">
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Forma Pagamento:" for="formapagamento"></h:outputLabel>
<p:selectOneMenu id="formapagamento" label="formapagamento" value="#{detalheVendaBean.detalheVenda.formapagamento}" maxlength="50" required="true">
<f:selectItem itemLabel="Cartão de Crédito" itemValue="1" />
<f:selectItem itemLabel="Cartão de Débito" itemValue="2" />
<f:selectItem itemLabel="Cheque" itemValue="3" />
<f:selectItem itemLabel="Dinheiro" itemValue="4" />
</p:selectOneMenu>
<h:outputLabel value="Tipo Pagamento:" for="tipopagamento"></h:outputLabel>
<p:selectOneMenu id="tipopagamento" label="tipopagamento" value="#{detalheVendaBean.detalheVenda.tipopagamento}" maxlength="50" required="true">
<f:selectItem itemLabel="A Vista" itemValue="1" />
<f:selectItem itemLabel="Parcelado" itemValue="2" />
</p:selectOneMenu>
<h:outputLabel value="Desconto (R$):" for="desconto"></h:outputLabel>
<h:inputText id="desconto" value="#{detalheVendaBean.detalheVenda.precodesconto}"/>
</h:panelGrid>
<p:commandButton id="btnSalvar" value="SALVAR" actionListener="#{detalheVendaBean.salvar}"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="cadastrarDetalheVenda.hide()"/>
</h:form>
</p:dialog>
</h:body>
</ui:define>
</ui:composition>
Desse jeito eu seleciono a linha e clico em Adicionar Item a Venda.
Então a minha dúvida é que quando rodo o programa e clico em uma linha e logo seguinte no botão adicionar item a venda aparece o código correto, so que quando fecho a janela de adicionar item e volto a selecionar uma venda o id que aparece é o id da venda selecionada anteriormente. Como arruma isso?
Fiz uma pequena alteração. Na minha classe de controle ItemVendaRapidaBean tem o seguinte método get:
public int getCodigo() {
List lista = (List) vendadao.consultaHQL("select max(id) from VendaRapida");
int valor;
if(lista.isEmpty()){
this.codigo = 0;
}else{
valor = (int)lista.get(0);
this.codigo = valor;
}
return codigo;
}
Só que ele está retornando o penultimo valor e não o último valor. O que está errado?
Consegui consertar o problema anterior. Só que agora tenho um outro problema. Como pego o valor do id dessa venda e jogo no id da venda na tabela itemvendarapida. Abaixo está a classe entity itemvendarapida:
@Entity
public class ItemVendaRapida implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@AttributeOverrides( { @AttributeOverride(name = "produto_id", column =
@Column(name = "produto_id", nullable = false)), @AttributeOverride(name =
"venda_id", column = @Column(name = "venda_id", nullable = false)) })
private Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "produto_id", nullable = false, insertable = false, updatable = false)
private Produto produto;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn
private VendaRapida venda;
@Column(name="precototal")
private double precototal;
@Column(name="precodesconto")
private double precodesconto;
@Column(name="precovenda")
private double precovenda;
public ItemVendaRapida() {
}
public ItemVendaRapida(Integer id, Produto produto, VendaRapida venda, double precototal, double precodesconto, double precovenda) {
this.id = id;
this.produto = produto;
this.venda = venda;
this.precototal = precototal;
this.precodesconto = precodesconto;
this.precovenda = precovenda;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public VendaRapida getVenda() {
return venda;
}
public void setVenda(VendaRapida venda) {
this.venda = venda;
}
public double getPrecototal() {
return precototal;
}
public void setPrecototal(double precototal) {
this.precototal = precototal;
}
public double getPrecodesconto() {
return precodesconto;
}
public void setPrecodesconto(double precodesconto) {
this.precodesconto = precodesconto;
}
public double getPrecovenda() {
return precovenda;
}
public void setPrecovenda(double precovenda) {
this.precovenda = precovenda;
}
}
O xhtml uma parte dele está abaixo:
<p:dialog id="modalDialogItemVenda" width="500" resizable="no" widgetVar="cadastrarItemVenda" header="CADASTRAR ITENS DE VENDA" modal="true" height="500">
<h:form id="formCadastroItemVenda">
<h:panelGrid columns="2" cellpadding="4">
<h:outputLabel value="Produto:" for="produto"/>
<p:selectOneMenu value="#{itemVendaRapidaBean.itemVenda.produto}" converter="bancoConverter" >
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoBean.produtos}" var="itens" itemValue="#{itens}" itemLabel="#{itens.nome}"/>
</p:selectOneMenu>
<h:outputLabel value="Código:" for="venda"/>
<h:outputText id="pre" value="#{itemVendaRapidaBean.itemVenda.venda.id = itemVendaRapidaBean.codigo}" />
<h:outputLabel value="Total (R$):" for="total"></h:outputLabel>
<h:inputText id="total" value="#{itemVendaRapidaBean.itemVenda.precototal}"/>
<h:outputLabel value="Desconto (R$):" for="desconto"></h:outputLabel>
<h:inputText id="desconto" value="#{itemVendaRapidaBean.itemVenda.precodesconto}"/>
<h:outputLabel value="Preço da Venda (R$):" for="precovenda"></h:outputLabel>
<h:inputText id="precovenda" value="#{itemVendaRapidaBean.itemVenda.precovenda}"/>
</h:panelGrid>
<p:commandButton id="btnSalvarItemVenda" value="ADICIONAR" actionListener="#{itemVendaRapidaBean.salvar}"/>
<p:commandButton id="FinalizarItemVenda" value="FINALIZAR VENDA"/>
<p:commandButton id="btnCancelar" value="FECHAR" oncomplete="cadastrarItemVenda.hide()"/>
</h:form>
</p:dialog>
Esse problema está me enroscando, aff já perdi muito tempo nisso. Alguma sugestão para esse problema?
Pessoal estou com um problema, já tentei de várias formas corrigir o problema mas não consigo sair dele. A classe vendarapida está logo abaixo:
@Entity
public class VendaRapida implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@Column(name="datarealizada")
@Temporal(TemporalType.DATE)
private Date datarealizada;
@Temporal(TemporalType.TIME)
private Date hora;
@Column(name="formapagamento", length = 50)
private String formapagamento;
@Column(name="tipopagamento", length = 50)
private String tipopagamento;
@Column(name="precototal")
private double precototal;
@Column(name="precodesconto")
private double precodesconto;
@Column(name="precovenda")
private double precovenda;
@Column(name="observacao")
private String observacao;
@OneToMany(cascade=CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
private List<ItemVendaRapida> vendasItens;
//get e set
}
A minha classe itemvendarapida:
@Entity
public class ItemVendaRapida implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "produto_id", nullable = true, insertable = false, updatable = false)
private Produto produto;
@ManyToOne(optional = false, cascade=CascadeType.PERSIST)
@JoinColumn(nullable = true)
private VendaRapida venda;
@Column(name="quantidade")
private int quantidade;
//get e set
}
O método salvar na classe controller:
public void salvar(ActionEvent event) {
if(venda.getVendasItens()== null ){
venda.setVendasItens(new ArrayList<ItemVendaRapida>());
}
venda.getVendasItens().add(itemvenda);
dao.save(venda); //metodo da JPA
}
O método save:
@Override
public T save(T objeto) {
try {
Object obj = null;
HibernateUtility.beginTransaction();
obj = HibernateUtility.getSession().merge(objeto);
HibernateUtility.commitTransaction();
HibernateUtility.closeSession();
return (T) obj;
} catch (HibernateException hibernateException) {
cancel();
throw hibernateException;
}
}
Quando executo o programa dá o seguinte erro: com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError org.hibernate.PropertyValueException: not-null property references a null or transient value: Modelo.ItemVendaRapida.venda
Qual a possível solução, já pesquisei em vários lugares e não encontro nada. Alguém pode me ajudar?