Ir para conteúdo
Fórum Script Brasil
  • 0

Erro ao gravar List no banco de dados


geovir

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...