• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Erros JPA – org.hibernate.MappingException: Unknown entity

April 13, 2015 by Mauda 13 Comments

Conteúdo do Post:
  1. Descrição do Erro
  2. Solução
  3. 1) A Entidade que está sendo mapeada não possui a annotation javax.persistence.@Entity. Assim é necessário adicionar essa annotation a sua classe Java, como mostra o código abaixo:
  4. 2) A Entidade que está sendo mapeada não foi adicionada ao Arquivo hibernate.cfg.xml. Assim é necessário abrir esse arquivo e inserir a entidade com uma tag mapping, como mostra o código abaixo:
  5. 3) A classe Java foi annotada com @Entity e também foi adicionada ao arquivo hibernate.cfg.xml. Você pode ter errado o import!
  6. finally{

Olá Pessoal, tudo bom?

Hoje iremos falar sobre erro de Mapeamento de Entidades JPA, mais especificamente da exception Unknown entity.

Descrição do Erro

Ao mapear entidades via JPA para realizar a comunicação entre um banco de dados e o Java nós utilizamos a annotation @Entity para indicar ao JPA que esta entidade reflete uma tabela do banco de dados.

Se caso você mapeou a entidade e ocorreu um erro com a seguinte stack trace:

br.pucpr.bsi.prog6.ticketsEventosBSI.exception.BSIException: org.hibernate.MappingException: Unknown entity: br.pucpr.bsi.prog6.ticketsEventosBSI.model.Artista
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.PatternDAO.insert(PatternDAO.java:96)
at br.pucpr.bsi.prog6.ticketsEventosBSI.bc.ArtistaBC.insert(ArtistaBC.java:29)
at br.pucpr.bsi.prog6.ticketsEventosBSI.tests.laboratorioBC.TesteArtistaBC.criar(TesteArtistaBC.java:39)
at br.pucpr.bsi.prog6.ticketsEventosBSI.tests.laboratorioDAO.modification.TesteArtistaDAOModification.criar(TesteArtistaDAOModification.java:59)
… 28 more

Solução

Existem 3 possíveis soluções para essa exceção:

1) A Entidade que está sendo mapeada não possui a annotation javax.persistence.@Entity. Assim é necessário adicionar essa annotation a sua classe Java, como mostra o código abaixo:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package br.com.mauda.example.model;
 
import java.io.Serializable;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Long id;
private String nome;
//outros atributos, métodos e construtores
}

2) A Entidade que está sendo mapeada não foi adicionada ao Arquivo hibernate.cfg.xml. Assim é necessário abrir esse arquivo e inserir a entidade com uma tag mapping, como mostra o código abaixo:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/myServerDB</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">true</property>
<property name="hibernate.connection.pool_size">10</property>
<!-- Mapping files -->
<mapping class="br.pucpr.bsi.prog6.ticketsEventosBSI.model.Ambiente"/>
<mapping class="br.pucpr.bsi.prog6.ticketsEventosBSI.model.Artista"/>
</session-factory>
</hibernate-configuration>

3) A classe Java foi annotada com @Entity e também foi adicionada ao arquivo hibernate.cfg.xml. Você pode ter errado o import!

Existem duas anotações @Entity ao trabalhar com JPA + Hibernate. A primeira, que surgiu antes quando não havia a especificação JPA, é a org.hibernate.annotations.Entity e a segunda javax.persistence.Entity, que está dentro da especificação JPA. Ao importar a annotation do Hibernate, ocorrerá a unknownException acima. Assim é necessário importar a anotação do JPA para que o erro não ocorra, como mostra o código abaixo:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package br.com.mauda.example.model;
 
import java.io.Serializable;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
//import org.hibernate.annotations.Entity;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Long id;
private String nome;
//outros atributos, métodos e construtores
}

finally{

Caso você achou mais alguma solução para essa exception, por favor deixe nos comentários abaixo!

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Erros, Hibernate, Java, JPA Tagged With: Entidades, Erros, Exceptions, Hibernate, Java, JPA, Mapeamento

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Comments

  1. Gabriel Guedes says

    November 1, 2015 at 12:54 pm

    Artigo perfeito!
    Muito obrigado!!!

    Reply
    • Mauda says

      November 3, 2015 at 10:44 am

      Olá Gabriel, tudo bom?

      Obrigado pelo feedback!

      Precisando estamos aqui!

      Abs.

      Mauda

      Reply
  2. Eduardo Gomes says

    March 17, 2016 at 5:04 pm

    Olá Mauda!

    Post muito bom!

    Eu estou com essa mensagem, mas mesmo após seguir suas recomendações o problema persiste.

    mar 17, 2016 4:59:44 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory
    INFO: HHH000397: Using ASTQueryTranslatorFactory
    Exception in thread “main” org.hibernate.MappingException: Unknown entity: java.lang.String
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1479)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
    at teste.Teste.main(Teste.java:21)

    Reply
    • Mauda says

      March 17, 2016 at 10:43 pm

      Olá Eduardo, tudo bom?

      Obrigado pelo feedback!

      Você poderia me fornecer mais informações como o que vc está tentando mapear e um código do que você está tentando fazer que gera o erro.

      Pois somente essa stack é mais complicada de entender.

      Se for o caso me mande um email mauda@mauda.com.br

      Obrigado.

      Mauda

      Reply
  3. Elton says

    October 27, 2017 at 1:13 pm

    Não estou conseguindo e to recebendo esse mesmo erro também, esse é o codigo: github.com/eltonsantos/embeddedClasses
    Pode me ajudar? Eu segui exatamente o q c disse pra tentar remover os erros.

    Reply
    • Mauda says

      October 27, 2017 at 5:44 pm

      Olá Elton, tudo bom?

      Me envie a stack trace que está acontecendo o erro, pois preciso saber qual classe está com problema.

      Obrigado.

      Reply
    • Mauda says

      October 27, 2017 at 5:55 pm

      Pelo que entendi rapidamente do seu código vc está tentando utilizar a Endereco (Entidade dependente) dentro Usuario (Entidade progenitora), mas para utilizar o @Embeddable ou @Embedded você deve ter apenas uma tabela que contemple ambas as classes, ok?

      Existem duas formas de mapeamento para esse caso:

      A primeira é utilizar somente @Embeddable
      – Na entidade progenitora, deverá ser removido o mapeamento @OneToOne do atributo que referencia a classe dependente
      – A entidade dependente será mapeada com a annotation @Embeddable ao invés de @Entity

      A segunda é utilizar somente @Embedded
      – Na entidade progenitora, deverá ser removido o mapeamento @OneToOne do atributo que referencia a classe dependente e acrescentado a annotation @Embedded
      – Remover da entidade dependente a annotation @Entity

      Para ambas as formas de mapear você deverá fazer:
      – Além disso deverá ser removido o atributo id da entidade dependente
      – A entidade dependente deverá ser removida do persistence.xml ou hibernate_cfg.xml

      Tente esses passos e qualquer coisa mande a stack trace do código.

      Obrigado.

      Reply
      • Elton Melo dos Santos says

        October 29, 2017 at 4:49 pm

        Obrigado pela resposta meu amigo, eu consegui resolver esse problema, mas gerou um ainda pior, mas nao é nada referente a seu blog ou tutorial, é apenas pra aprendizado esse meu projetinho. Vc nao precisa responder se nao quiser, é sobre passar parametros, nao consigo de forma alguma, toda vez que tento vem null, se vc olhar na index do meu projeto: github.com/eltonsantos/embeddedClasses
        E dps a forma com que eu pego eles em endereco.xhtml verá que parece ta tudo correto, existe algum detalhe q nao estou me tocando e ja nem sei o que fazer, ja busquei tutoriais, amigos, colegas, ninguem ajuda. Ou mandam eu estudar (como se nao tivesse fazendo) ou mandam eu resolver so… Enfim, eh osso isso.

        Reply
        • Mauda says

          October 29, 2017 at 10:12 pm

          Olá Elton, tudo bom?

          Me explique com mais detalhes, falando quais linhas de código e qual é o stack q está sendo lançado pelo Java que posso talvez te ajudar. Somente com essas informações que você informou, não dá para ter idéias por onde começar a procurar pra te ajudar, então me explicando melhor pode ser algo para ajudar a começar a avaliar seu código.

          Obrigado.

          Reply
          • Elton says

            October 30, 2017 at 10:21 am

            Na verdade, toda vez que entro em contato ctg eu resolvo um problema e acaba surgindo um maior kkkkk. Bom, sobre a passagem de parametros eu meio que “deixei pra lá”, eu estou com um forte e grave problema em fazer um relacionamento um pra um, sim eu sei q eh simples, mas eu sou noobÃO e eu preciso fazer isso, fui meio que intimado aqui no trabalho e ta osso, não da pra passar a missão pra outra pessoa e nem esperar um ano pra ser fera em java pra fazer isso. Eu preciso fazer um sistema aqui, mas pra nao subir o sistema no git, eu fiz algo bem parecido com o que quero, abstraindo muita coisa e deixando somente o que importa pra eu aprender como fazer. Ai eu criei o repositorio: github.com/eltonsantos/embeddedClasses
            Aqui tem usuario e endereco, sao duas entidades, que fazem um relacionamento one-to-one. To usando JSF, JPA. O problema é o seguinte, nao ta dando erro, faço a inserção de Usuario primeiro ok, porém quando vou fazer a inserção de Endereço ele também faz, porém o usuario_id vem vazio e ai ele não reconhece da forma que quero o relacionamento. E isso envolve passagem de parametro que vem vazio e no banco salva tudo, menos o usuário_id. E eu queria saber onde ta o problema, mas em todos os tutoriais que já assisti não encontro isso 🙁

          • Mauda says

            November 4, 2017 at 10:07 am

            Olá Elton, tudo bom?

            O problema principal que estou percebendo aqui é foco. Primeiro se desesperar não vai adiantar. Vc precisa ter a visão do seu negocio em primeiro lugar. Como será a forma de relacionamento entre endereço e pessoa? Outras classes poderão utilizar de endereço? Se for será uma associação unidirecional. O aspecto que eu focaria em primeiro lugar eh a estruturação com orientação a objetos das minhas classes que representam o meu negócio, mas conhecido como classes de domínio. Para isso diagrama de classe uml vai te ajudar e muito. Depois disso começamos a parte de mapeamento dessas entidades com tabelas do banco de dados e por fin, quando as inserções, updates, selects estiverem funcionando me preocuparia com a tela. Fazendo dessa forma você não se quebra em tentar aprender tudo ao mesmo tempo e vai construindo o software entendendo cada parte. Uma dica para a parte visual procure a biblioteca primefaces, tem mais de 100 componentes a sua disposição. Obrigado.

  4. cesar paim says

    October 22, 2018 at 7:26 pm

    ajudou bastante aqui…Parabéns!!!

    Reply
    • Mauda says

      October 24, 2018 at 6:49 am

      Olá Cesar, tudo bom?

      Obrigado pelo feedback!

      Precisando estamos aqui.

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in