Estou com erros devido ao meu mapeamento para o meu programa em java, ainda estou começando a mexer com annotation (peço que perdoem possíveis erros estúpidos xD).
O erro deve estar no @ManyToOne/OneToMany…
Possuo duas tabelas, CONTA e JOGADOR. Após criar uma conta, o usuario pode criar um ou mais jogadores, ou seja, uma conta pode ter vários jogadores, mas cada jogador pertence apenas a uma conta. Em meu BD eu criei uma chave estrangeira chamada ID_CONTA na tabela JOGADOR, para receber o ID da CONTA.
Alguém saberia me explicar como devo corrigir esse erro?
Erro:
Exception in thread "main" javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at Teste.main(Teste.java:10)
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: Jogador.Conta in Conta.jogador
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:719)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
... 3 more
Classe Conta:
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Conta {
@Id @GeneratedValue
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "Jogador")
@JoinColumn(name="idConta")
private List <Jogador> jogador;
private String email;
private String senha;
private String nome;
//gets e sets
}
Classe Jogador:
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
@Entity
public class Jogador {
@Id @GeneratedValue
private int id;
@JoinColumn(name="id_conta")
private int idConta;
private String nome;
private int lvl;
private int exp;
private int corrupcao;
private int ouro;
private int força;
@ManyToOne
private Conta conta;
//gets e sets
}
Classe que esta executando(por hora, apenas na tabela Conta):
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Teste {
public static void main(String[] args)
{
EntityManagerFactory entity = Persistence.createEntityManagerFactory("persistence");
EntityManager em = entity.createEntityManager();
Conta c = new Conta();
//seleciona na tabela
//c=em.find(Conta.class, 21l);
//seta o nome ao obj
c.setNome("joao");
c.setEmail("joao@email.com");
c.setSenha("123");
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(c);// insert
//em.merge(c);//update
//em.remove(c);//delete
tx.commit();
em.close();
entity.close();
}
}
