Sou iniciante em Hibernate e estou tendo problemas em mapear com Annotations entidades com relacionamento.
Ao tentar criar uma sessão pelo método getSessionFactory() da classe HibernateUtil é gerado o erro abaixo.
Tentei ver se tinha esquecido de alguma configuração nas anotações das Classes de Entidades mas parece que está certo e procurei alguma coisa relacionada mas não consegui encontrar uma solução.
Alguém tem idéia do que eu estou errando e pode me ajudar ?
org.hibernate.MappingException: Attribute [resgate] refers to unknown entity: [java.util.List]
at org.hibernate.metamodel.source.internal.AssociationResolver.resolve(AssociationResolver.java:57)
at org.hibernate.metamodel.source.internal.AssociationResolver.resolve(AssociationResolver.java:44)
at org.hibernate.metamodel.source.internal.MetadataImpl.(MetadataImpl.java:169)
at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83)
at org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112)
at br.com.banco.model.dao.util.HibernateUtil.getSessionFactory(HibernateUtil.java:25)
at br.com.banco.model.dao.ClienteDAO.lista(ClienteDAO.java:18)
at teste1.main(teste1.java:10)
Segue as classes e as configurações:
Classe Cliente
package br.com.banco.model;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity(name="cliente")
public class Cliente implements Serializable{
@Id
@Column(name="id_cliente")
private int idCliente;
@Column(name="nome_cliente")
private String nomeCliente;
@OneToMany(mappedBy="cliente")
private List<Resgate> resgate;
public Cliente(){
}
public int getIdCliente() {
return idCliente;
}
public void setIdCliente(int idCliente) {
this.idCliente = idCliente;
}
public String getNomeCliente() {
return nomeCliente;
}
public void setNomeCliente(String nomeCliente) {
this.nomeCliente = nomeCliente;
}
public List<Resgate> getResgate() {
return resgate;
}
public void setResgate(List<Resgate> resgate) {
this.resgate = resgate;
}
}
Classe Resgate
package br.com.banco.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity(name="resgate")
public class Resgate implements Serializable{
@Id
@Column(name="id_resgate")
private int idResgate;
@Column(name="endereco")
private String endereco;
@ManyToOne
@JoinColumn(name="id_cliente")
private Cliente cliente;
public Resgate(){
}
public int getIdResgate() {
return idResgate;
}
public void setIdResgate(int idResgate) {
this.idResgate = idResgate;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
}
Classe HibernateUtil
package br.com.banco.model.dao.util;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.metamodel.MetadataSources;
import org.hibernate.service.*;
import br.com.banco.model.Cliente;
import br.com.banco.model.Resgate;
public class HibernateUtil {
private static SessionFactory sf;
public static SessionFactory getSessionFactory(){
if (sf == null){
try{
sf = new MetadataSources(
new ServiceRegistryBuilder()
.configure()
.buildServiceRegistry())
.addAnnotatedClass(Cliente.class)
.addAnnotatedClass(Resgate.class)
.buildMetadata()
.buildSessionFactory();
}catch(HibernateException e){
e.printStackTrace();
sf = null;
}
}
return sf;
}
}
Arquivo hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration xmlns="http://www.hibernate.org/xsd/hibernate-configuration">
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/relationship</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
</session-factory>
</hibernate-configuration>
Obrigado!