• 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.AnnotationException: mappedBy reference an unknown target entity property: ClasseDestino.nameMappedBy in ClasseOrigem.attribute

July 10, 2017 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 um erro de Mapeamento de Entidades JPA, mais especificamente da exception org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: ClasseDestino.nameMappedBy in ClasseOrigem.attribute.

Descrição do Erro

Ao mapear um atributo de uma entidade JPA, utilizando-se o mappedBy, deve ser inserido o nome do atributo da classe mapeada corretamente. Por exemplo, verifique 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
23
24
25
26
27
28
29
package br.com.mauda.example.model;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@OneToMany(mappedBy = "artistas")
private List<Musica> musicas = new ArrayList<Musica>();
 
public Artista(){
}
//outros atributos, métodos e construtores
}

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
package br.com.mauda.example.model;
 
import java.io.Serializable;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
 
@Entity
public class Musica implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@ManyToOne
@JoinColumn(name="ID_ARTISTA")
private Artista artista;
 
//outros atributos, métodos e construtores
}

Se o mapeamento foi feito dessa forma ocorrerá um erro com a seguinte stack trace:

org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: ClasseDestino.artistas in ClasseOrigem.musicas
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:709)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:669)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:69)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1639)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1393)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1784)

Solução

Para corrigir essa exception deve-se modificar o valor que se encontra no element mappedBy da Entidade Origem (no exemplo, Artista).

Assim, no caso do exemplo, o nome do atributo na entidade Destino, Musica, é artista e não artistas, ao modificar o valor do mappedBy no atributo musicas da entidade Artista, será corrigido o problema, 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
23
24
25
26
27
28
29
package br.com.mauda.example.model;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
 
@Entity
public class Artista implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@OneToMany(mappedBy = "artista")
private List<Musica> musicas = new ArrayList<Musica>();
 
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, mappedBy

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