Unknown entity - [Resolvido]

25 respostas
R

Feras,

estou tentando persistir alguns dados no Banco de Dados porém estou recebendo a exceção abaixo,

esse erro acho que deveria acontecer se eu não tivesse minha entidade mapeada mas tenho segue abaixo minha configuração no Persistence.xml

<persistence-unit name="portalEmailOracle" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/DefaultDS</jta-data-source>
		
		<class> br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO</class>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@servidor:1521:DB"/>
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
		</properties>
	</persistence-unit>

e Minha entidade esta com as anotações necessarias

Erro:

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.IllegalArgumentException: Unknown entity: br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:856)

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) 	at br.com.getnet.portalsistemaretaguarda.generic.dao.GenericImplDAO.save(GenericImplDAO.java:40)

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) 	at br.com.getnet.portalsistemaretaguarda.relatorio.decred.bo.RelPedidosBO.CadastrarPedido(RelPedidosBO.java:88)

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) 	at br.com.getnet.portalsistemaretaguarda.relatorio.decred.delegate.RelPedidosDelegate.cadastrarPedido(RelPedidosDelegate.java:77)

14:34:48,582 ERROR [stderr] (http--127.0.0.1-8080-1) 	at br.com.getnet.portalsistemaretaguarda.relatorio.decred.mbean.RelPedidosMbean.cadastrarPedido(RelPedidosMbean.java:57)

14:34:48,583 ERROR [stderr] (http--127.0.0.1-8080-1) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

14:34:48,614 ERROR [stderr] (http--127.0.0.1-8080-1) 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

14:34:48,614 ERROR [stderr] (http--127.0.0.1-8080-1) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

14:34:48,614 ERROR [stderr] (http--127.0.0.1-8080-1) 	at java.lang.reflect.Method.invoke(Unknown Source)

14:34:48,614 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)

14:34:48,614 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)

14:34:48,629 ERROR [stderr] (http--127.0.0.1-8080-1) 	at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)

14:34:48,629 ERROR [stderr] (http--127.0.0.1-8080-1) 	at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:78)

14:34:48,629 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:57)

14:34:48,629 ERROR [stderr] (http--127.0.0.1-8080-1) 	at javax.faces.component.UICommand.broadcast(UICommand.java:143)

14:34:48,645 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)

14:34:48,645 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)

14:34:48,645 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)

14:34:48,645 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)

14:34:48,645 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)

14:34:48,661 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)

14:34:48,661 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)

14:34:48,661 ERROR [stderr] (http--127.0.0.1-8080-1) 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:151)

14:34:48,661 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)

14:34:48,676 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)

14:34:48,692 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

14:34:48,708 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

14:34:48,708 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)

14:34:48,708 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)

14:34:48,708 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)

14:34:48,708 ERROR [stderr] (http--127.0.0.1-8080-1) 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)

14:34:48,723 ERROR [stderr] (http--127.0.0.1-8080-1) 	at java.lang.Thread.run(Unknown Source)

25 Respostas

R

Geralmente é seguido uma convencao de que, os pacotes levam nomes minusculos, e as classes que comecam com Maiusculo, no seu caso vou chutar no escuro,

java.lang.IllegalArgumentException: Unknown entity: br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO

tire o ultimo PedidosTO, deixe somente 1, e poste a classe PedidosTO pra analisarmos.

L

Cade o mapeamento da sua entidade ?

Acho que tinha que colocar a tag mapping-class também no arquivo de properties.

R

Fera,

desculpe ai foi um erro meu ao postar mas esta assim:
br.com.portal.relatorio.decred.to.PedidosTO

e não assim como havia postado
br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO

R

eita, falta o user e o password tb =D

<properties>  
        <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />  
        <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@servidor:1521:DB"/>  
        <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />  
        <property name="hibernate.show_sql" value="true" />  
        <property name="hibernate.format_sql" value="true" />  
    </properties>
R

lele_vader

estou usando o Persistence.xml nesse arquivo a gente mapeia com a tag

o mapping-class seria se estivesse usando Hibernate

rof20004

quanto ao usuário isso esta mepeado no meu standalone.xml do Jboss não e necessario eu ter no Persistence.xml tb

A

Tem um espaço em branco dentro de sua tag, retire este espaço limpe o projeto e refaça o deploy e verifique se vai dar certo ?

<class> br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO</class>
R

ok, voce verificou se o mapeamento da classe esta correto ? existe …PedidoTO.PedidoTO ?

L

Ah é.
não vi que era jpa.
Eu disse isso porque você não colocou no seu arquivo.

Mas essa classe aqui
br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO

está no class ou será que é uma entidade que deveria estar transiente e falta o @transient ?

R

O @transient onde eu sei seria uma anotação de uma determinada coluna q quando eu for persistir o dado no banco o valor dessa coluna não será persistido correto ?

se for isso tenho uma coluna conforme abaixo q a ideia e quando eu persistir os dados o valor dessa coluna seja uma sequence, e não recebe valores como os outros campos

@Id  
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "ID_PEDIDO")
            private String idPedido;
R

Feras,

Retirei o espaço e tb conferi sim e o mapeamento esta correto

A

mas continua dando o mesmo erro após isto ?

A

Acho que isto deve te ajudar …

http://www.guj.com.br/java/253937-jpa–unknown-entity/2

R

Continua sim Fera

R

Aleksandro,

fiz uma verificação como no post q vc passou, e os nomes estão ok,

estou usando um GenericDAO na Persistencia,

conferi para ver se os nomes estão iguais principalmente as letras maiusculas e minisculas

e esta correto

R

hummmm, voce pode postar a classe PedidoTO ?

R

Segue

package br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import br.com.portal.generic.to.GenericEntityTO;

@Entity
@Table(name="PEDIDOS_DECRED")
@NamedQueries({
		@NamedQuery(name = "PedidosDecredTO", query = "SELECT pd FROM PedidosDecredTO pd where pd.dataDe = :dataDe and pd.dataAte = :dataAte"),
		@NamedQuery(name = "PedidosDecredTO.findAll", query = "SELECT pd FROM PedidosDecredTO pd") 
		})


public class PedidosDecredTO implements Serializable, GenericEntityTO{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/*
	 * Consulta Todos os pedidos Cadastrados através da data
	 */
	public static final String pesquisarbyData = "PedidosDecredTO";	
	/*
	 * Consulta Todos os pedidos Cadastrados
	 */
	public static final String pesquisarTodos = "PedidosDecredTO.findAll";

	
    @Id  
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "ID_PEDIDO")
	private long idPedido;
	
	@Column(name = "USUARIO_SOLICITANTE")
	private String usuarioSolicitante;
	
	@Column(name = "DATA_DE")
	private String dataDe;
	
	@Column(name = "DATA_ATE")
	private String dataAte;
	
	@Column(name = "STATUS")
	private String status;
	
	@Column(name = "DATA_PEDIDO")
	private String datapedido;
	
	@Column(name = "HORA_PEDIDO")
	private String horaPedido;
	
	@Column(name = "NOM_ARQUIVO")
	private String nomeArquivo;

	public long getIdPedido() {
		return idPedido;
	}

	public void setIdPedido(long idPedido) {
		this.idPedido = idPedido;
	}

	public String getUsuarioSolicitante() {
		return usuarioSolicitante;
	}

	public void setUsuarioSolicitante(String usuarioSolicitante) {
		this.usuarioSolicitante = usuarioSolicitante;
	}

	public String getDataDe() {
		return dataDe;
	}

	public void setDataDe(String dataDe) {
		this.dataDe = dataDe;
	}

	public String getDataAte() {
		return dataAte;
	}

	public void setDataAte(String dataAte) {
		this.dataAte = dataAte;
	}

	public void setDatapedido(String datapedido) {
		this.datapedido = datapedido;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getHoraPedido() {
		return horaPedido;
	}

	public void setHoraPedido(String horaPedido) {
		this.horaPedido = horaPedido;
	}

	public String getNomeArquivo() {
		return nomeArquivo;
	}

	public void setNomeArquivo(String nomeArquivo) {
		this.nomeArquivo = nomeArquivo;
	}

	public String getDatapedido() {
		return datapedido;
	}

	@Override
	public Serializable getIdentificador() {
		return getIdPedido();
	}
}
F

Estranho hein.

Já deu stop e start no servidor?

Tento apagar o mapeamento do persistence e gerar de novo, usando as ferramentas da IDE?

F

Agora que vi sua classe, não tá mapeada de forma errada?

Na sua entity, o nome seria : br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO.PedidosDecredTO, já no persistence, está br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO

Tenta colocar no persistence assim: br.com.portal.relatorio.pedidos.to.PedidosTO.PedidosTO.PedidosDecredTO.

R

Feras,

eu estava alterando alguns nomes e acho q causou algumas divergencias segue como esta meu persistence.xml

<persistence-unit name="portalEmailOracle" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:/DefaultDS</jta-data-source>
		
		<class>Minha Entidade aqui</class>
		
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@servidor:1521:DB"/>
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
		</properties>
	</persistence-unit>
F

Se tirar essas constantes:

/* 
     * Consulta Todos os pedidos Cadastrados através da data 
     */  
    public static final String pesquisarbyData = "PedidosDecredTO";   
    /* 
     * Consulta Todos os pedidos Cadastrados 
     */  
    public static final String pesquisarTodos = "PedidosDecredTO.findAll";

funciona?

A

Bom olhando assim não vi nada de errado , porém segue alguns pontos a verificar:

1 - DefaultDS esta mapeado corretamente para acesso ao BD?
2 - Se o item 1 estiver ok, limpe o projeto inclusive dentro da pasta do servidor , exclua tudo , limpe pela IDE também e refaça o deploy novamente ?

São algumas possibilidades …

R

Feras,

as constantes não posso tirar pois eu uso elas para fazer consultas…

Quanto ao mapeamento do meu DataSource não tem problemas pois as consultas que faço esta retornando os dados OK,

Eu já fiz uma limpeza no projeto, e tb excluir os deploy que gera dentro da pasta do Jboss

T

Amigo,

tenta criar uma nova entidade com as anotacion da tabelas e colunas q vc esta usando e testa.

R

Thiago eu fiz isso mas deu o mesmo erro…

R

Feras,

consegui resolver o problema segue a solução, era pq tenho mais de um DataSource configurado em minha aplicação,

quando eu estava “chamando” o metodo save estava pegando a conexão de outro DataSource que não era da minha entidade que estava persistindo os dados

Obrigado pela ajuda de todos

Criado 4 de dezembro de 2012
Ultima resposta 7 de dez. de 2012
Respostas 25
Participantes 6