• 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: Could not determine type for: java.util.List, at table

June 1, 2015 by Mauda Leave a Comment

Conteúdo do Post:
  1. Descrição do Erro
  2. Solução
  3. finally{

Olá Pessoal, tudo bom?

Hoje iremos falar sobre mais um erro de Mapeamento de Entidades JPA, especificamente da exception org.hibernate.MappingException: Could not determine type for: java.util.List, at table

Descrição do Erro

Uma associação entre classes possui quatro formatos distintos caracterizados pela cardinalidade de cada associação. Estes podem ser OneToOne, OneToMany, ManyToOne e ManyToMany. Ao representar uma associação em uma classe Java dependendo da cardinalidade podemos representar por atributos simples, somente a instância de uma classe, ou por atributos múltiplos, utilizando Lists, Sets ou qualquer outra estrutura de dados representadas na API Collection.

Todos os atributos de uma classe Java são automaticamente mapeados pelo JPA. Assim um atributo representado na classe indica para o JPA que existe uma coluna na tabela com o mesmo nome do atributo.

Ao não representar uma associação com as annotations específicas, o JPA irá gerar um erro com uma stack trace muito parecida com a seguinte stack:

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: NomeEntidade, for columns: [org.hibernate.mapping.Column(br.pucpr.bsi.prog6.ticketsEventosBSI.model.Evento)]
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:277)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:224)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3568)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3522)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1379)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1784)
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.util.HibernateUtil.getSessionFactory(HibernateUtil.java:23)
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.util.HibernateUtil.getSession(HibernateUtil.java:29)
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.PatternDAO.insert(PatternDAO.java:84)
at br.pucpr.bsi.prog6.ticketsEventosBSI.bc.ArtistaBC.insert(ArtistaBC.java:29)
… 35 more

Solução

A solução para este erro é criar o mapeamento correto do banco de dados utilizando annotations correspondentes para realizar este mapeamento. Assim é necessário utilizar a combinação das seguintes anotações:

  • javax.persistence.@OneToOne
  • javax.persistence.@OneToMany
  • javax.persistence.@ManyToOne
  • javax.persistence.@ManyToMany

Com as seguintes annotations:

  • javax.persistence.@JoinColumn
  • javax.persistence.@JoinTable

Por exemplo no código abaixo repare que existe uma associação com a classe Evento, a qual é ManyToMany entre a classe Artista. Dessa forma existe uma representação de uma tabela associativa, o qual descrevemos através da annotation @JoinTable e a annotation @ManyToMany que representa a cardinalidade da associação.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package br.com.mauda.example.model;
 
import java.io.Serializable;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
 
 
@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;
@ManyToMany
@JoinTable(name="TB_ARTISTA_EVENTO",
   joinColumns={@JoinColumn(name="ID_EVENTO")},
   inverseJoinColumns={@JoinColumn(name="ID_ARTISTA")})
private List<Evento> eventos;
 
public Artista(){
}
//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

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