Jump to content
Fórum Script Brasil
  • 0

Erro ao gravar List no banco de dados


geovir

Question

Olá pessoal,
Tenho a entidade PlanoContas e a entidade Conta, onde a entidade PlanoContas possui inúmeras contas relacionadas, para relacionar as contas estou usando um List, porém no momento de gravar esta retornando o erro abaixo, creio que meu problema esteja na classe ContasConverter, mas preciso de ajuda para identificar e ajustar o problema.
Erro:
value="#{planoContasControle.objeto.conta}": Cannot convert beans.Conta@20 of type class beans.Conta to interface java.util.List
Abaixo segue meu código...
Bean PlanoContas
======================================================================
package beans;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@Entity
public class PlanoContas implements Serializable {
@Id
@SequenceGenerator(name = "PlanoId", allocationSize = 1, sequenceName = "PlanoId")
@GeneratedValue(generator = "PlanoId", strategy = GenerationType.AUTO)
private Integer id;
@NotNull(message = "O campo Código deve ser preenchido")
@Column(length = 12, nullable = false)
private String numero;
@NotNull(message = "O campo descrição deve ser preenchido")
@Column(length = 60, nullable = false)
private String descricao;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de inicio da validade")
@Column(name = "inicioValidade")
private Date inicioValidade;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de fim da validade")
@Column(name = "fimValidade")
private Date fimValidade;
@ManyToOne
private CentroCusto centroCusto;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private List<Conta> conta;
private static final long serialVersionUID = 1L;
public PlanoContas() {
super();
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Date getInicioValidade() {
return inicioValidade;
}
public void setInicioValidade(Date inicioValidade) {
this.inicioValidade = inicioValidade;
}
public Date getFimValidade() {
return fimValidade;
}
public void setFimValidade(Date fimValidade) {
this.fimValidade = fimValidade;
}
public CentroCusto getCentroCusto() {
return centroCusto;
}
public void setCentroCusto(CentroCusto centroCusto) {
this.centroCusto = centroCusto;
}
public List<Conta> getConta() {
return conta;
}
public void setConta(List<Conta> conta) {
this.conta = conta;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PlanoContas other = (PlanoContas) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
}
======================================================================
Bean Canta
======================================================================
package beans;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.constraints.NotNull;
@Entity
public class Conta implements Serializable {
@Id
@SequenceGenerator(name = "ContaId", allocationSize = 1, sequenceName = "ContaId")
@GeneratedValue(generator = "ContaId", strategy = GenerationType.AUTO)
private Integer id;
@NotNull(message = "O campo numero deve ser preenchido")
@Column(length = 16, nullable = false)
private String numero;
@NotNull(message = "O campo descrição deve ser preenchido")
@Column(length = 60, nullable = false)
private String descricao;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de inicio da validade")
@Column(name = "inicioValidade")
private Date inicioValidade;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de fim da validade")
@Column(name = "fimValidade")
private Date fimValidade;
@NotNull(message = "O campo tipo deve ser preenchido")
@Column(length = 8, nullable = false)
private String tipo;
private static final long serialVersionUID = 1L;
public Conta() {
super();
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Date getInicioValidade() {
return inicioValidade;
}
public void setInicioValidade(Date inicioValidade) {
this.inicioValidade = inicioValidade;
}
public Date getFimValidade() {
return fimValidade;
}
public void setFimValidade(Date fimValidade) {
this.fimValidade = fimValidade;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Conta other = (Conta) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
======================================================================
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">
<f:view contentType="text/html" encoding="ISO-8859-1">
<h:head>
<h:outputScript name="calendario_pt_BR.js" library="js" />
<style type="text/css">
.ui-layout-north {
z-index: 20 !important;
overflow: visible !important;;
}
.ui-layout-north .ui-layout-unit-content {
overflow: visible !important;
}
.ui-widget,
.ui-widget .ui-widget {
font-size: 14px !important;
}
.ui-panelgrid td, .ui-panelgrid tr{
border-style: none !important
}
</style>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
<title>Plano de Contas</title>
</f:facet>
</h:head>
<h:form>
<p:growl id="growlMessages"/>
<p:panelGrid columns="10" >
<f:facet name="header">
<h:outputText value="Edição de Plano de Contas"/>
</f:facet>
<p:outputLabel value="Número:" for="numero"/>
<p:inputText size="10" maxlength="12" id="numero" value="#{planoContasControle.objeto.numero}" title="Número do Plano de Contas" required="true"/>
<p:outputLabel value="Descrição:" for="descricao" />
<p:inputText size="30" maxlength="60" id="descricao" value="#{planoContasControle.objeto.descricao}" title="Descrição" required="true"/>
<p:outputLabel value="Inicio Validade:" for="iniciovalidade" />
<p:calendar id="iniciovalidade" size="12" value="#{planoContasControle.objeto.inicioValidade}" title="Inicio da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
<p:outputLabel value="Fim Validade:" for="fimvalidade" />
<p:calendar id="fimvalidade" size="12" value="#{planoContasControle.objeto.fimValidade}" title="Fim da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
<p:outputLabel value="Centro Custo:" for="CentroCusto" />
<p:column headerText="CentroCusto" style="text-align: center; width: 100px">
<p:autoComplete id="CentroCusto" style="width:180px"
dropdown="true" multiple="false" forceSelection="true" var="obj"
itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#{obj}"
value="#{planoContasControle.objeto.centroCusto}"
converter="#{planoContasControle.centroCustoConverter}"
completeMethod="#{planoContasControle.completeCentro(query)}" title="Conta"/>
</p:column>
</p:panelGrid>
<p:separator/>
<p:outputLabel value="Adicionar Contas"/>
<p:dataTable id="itens" var="item" value="#{planoContasControle.linhas}" style="width: 360px" >
<p:column headerText="Contas" style="text-align: center; width: 100px">
<p:commandButton icon="ui-icon-plus" action="#{planoContasControle.adicionarLinhas()}" ajax="false"/>
<p:autoComplete id="Conta" style="width:180px"
dropdown="true" multiple="false" forceSelection="true" var="obj"
itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#{obj}"
value="#{planoContasControle.objeto.conta}"
converter="#{planoContasControle.contaConverter}"
completeMethod="#{planoContasControle.completeConta(query)}" title="Conta"/>
</p:column>
<p:column style="text-align: center; width: 30px">
<p:commandButton icon="ui-icon-trash" action="#{planoContasControle.removerLinhas(item)}" ajax="false"/>
</p:column>
<f:facet name="footer">
<div align="left">
<p:commandButton action="#{planoContasControle.gravar()}" value="Salvar" ajax="false"/>
<p:commandButton value="Cancelar" action="#{planoContasControle.cancelar()}" immediate="true" ajax="false" />
</div>
</f:facet>
</p:dataTable>
</h:form>
</f:view>
</html>
======================================================================
Minha controler PlanoContasControle
======================================================================
package Controler;
import beans.CentroCusto;
import beans.Conta;
import beans.PlanoContas;
import conexao.GerarEntityManager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import Converter.CentroCustoConverter;
import Converter.ContaConverter;
import java.util.ArrayList;
@ManagedBean(name="planoContasControle")
@SessionScoped
public class PlanoContasControle {
private List<PlanoContas> lista;
private List<Conta> listaConta;
private EntityManager em;
private PlanoContas objeto;
private CentroCustoConverter centroCustoConverter = new CentroCustoConverter();
private ContaConverter contaConverter = new ContaConverter();
private String ordemAtual = "id";
private Map<String, String> listaOrdem = new HashMap<String, String>();
List<Integer> linhas;
public PlanoContasControle() {
super();
listaOrdem.put("Descricao", "descricao");
listaOrdem.put("Código", "id");
linhas = new ArrayList<>();
linhas.add(1);
em = GerarEntityManager.getInstance().getEntityManager();
}
public List<Integer> getLinhas() {
return linhas;
}
public void adicionarLinhas() {
linhas.add(1);
}
public void removerLinhas(int indice) {
linhas.remove(indice);
}
public String incluir() {
objeto = new PlanoContas();
return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
}
public String atualizar() {
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
}
public List<PlanoContas> getLista() {
em = GerarEntityManager.getInstance().getEntityManager();
String jpql = "select p from PlanoContas p order by p." + ordemAtual;
lista = em.createQuery(jpql).getResultList();
em.close();
return lista;
}
public List<Conta> getListaConta() {
em = GerarEntityManager.getInstance().getEntityManager();
String jpql = "select c from Conta c";
listaConta = em.createQuery(jpql).getResultList();
em.close();
return listaConta;
}
public String gravar() {
em = GerarEntityManager.getInstance().getEntityManager();
em.getTransaction().begin();
if (objeto.getId() == null) {
em.persist(objeto);
} else {
em.merge(objeto);
}
em.getTransaction().commit();
//objeto = new PlanoContas();
return "";
}
public String alterar(Integer id) {
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.close();
return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
}
public String IncluirContas(Integer id) {
//objetoContas = new ContasPlano();
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.close();
return "/faces/Tarefas/PlanoContas/CAD_ContasPlano.xhtml";
}
public List<CentroCusto> completeCentro(String query) {
em = GerarEntityManager.getInstance().getEntityManager();
List<CentroCusto> results = em.createQuery(
"select c from CentroCusto c where upper(c.numero) like "
+ "'" + query.trim().toUpperCase() + "%' "
+ "order by c.numero").getResultList();
return results;
}
public List<Conta> completeConta(String query) {
em = GerarEntityManager.getInstance().getEntityManager();
List<Conta> results = em.createQuery(
"select c from Conta c where upper(c.numero) like "
+ "'" + query.trim().toUpperCase() + "%' "
+ "order by c.numero").getResultList();
return results;
}
public String excluir(Integer id) {
try {
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.getTransaction().begin();
em.remove(objeto);
em.getTransaction().commit();
em.close();
} catch (Exception e) {
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Registro não pode ser excluído, existem relacionamentos ativos!", "");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
}
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
}
public String cancelar() {
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public PlanoContas getObjeto() {
return objeto;
}
public void setObjeto(PlanoContas objeto) {
this.objeto = objeto;
}
public CentroCustoConverter getCentroCustoConverter() {
return centroCustoConverter;
}
public void setCentroCustoConverter(CentroCustoConverter centroCustoConverter) {
this.centroCustoConverter = centroCustoConverter;
}
public ContaConverter getContaConverter() {
return contaConverter;
}
public void setContaConverter(ContaConverter contaConverter) {
this.contaConverter = contaConverter;
}
public String getOrdemAtual() {
return ordemAtual;
}
public void setOrdemAtual(String ordemAtual) {
this.ordemAtual = ordemAtual;
}
public Map<String, String> getListaOrdem() {
return listaOrdem;
}
public void setListaOrdem(Map<String, String> listaOrdem) {
this.listaOrdem = listaOrdem;
}
}
======================================================================
Minha Converter ContaConverter
======================================================================
package Converter;
import beans.Conta;
import conexao.EntityManagerUtil;
import java.io.Serializable;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
public class ContaConverter implements Serializable, Converter {
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
if (string == null) {
return null;
}
return EntityManagerUtil.getEntityManager().find(Conta.class, Integer.parseInt(string));
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
if (o == null) {
return null;
}
Conta obj = (Conta) o;
return obj.getId().toString();
}
}
======================================================================
Desde já agradeço caso alguém possa me dar uma ajuda
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...