Olá pessoal!
Estou com um problema referente a persistência usando hibernate com o uso de herança nas classes, pois na aplicação tenho a classe aluno, professor e pessoa, sendo esta última abstrata, e as outras herdando. Fiz o banco (postgreSQL) usando “inherits” na tabela aluno e professor, e na aplicação fiz desta forma:
A classe Aluno
@Entity
@Table(name="Aluno")
public class Aluno extends Pessoa implements java.io.Serializable{
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE},targetEntity = Pessoa.class)
@JoinColumn(name="matricula")
@Id
private Integer matricula;
@Column (name = "semestre_inicio")
private Integer semestreInicio;
@Column (name = "ano_inicio")
@Temporal(javax.persistence.TemporalType.DATE)
private Date anoInicio;
A classe Professor
@Entity
@Table(name="Professor")
public class Professor extends Pessoa implements java.io.Serializable{
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE},targetEntity = Pessoa.class)
@JoinColumn(name="matricula")
@Id
private Integer matricula;
@Column (name="titulacao_maxima")
private String titulacaoMaxima;
A classe Pessoa
@Entity
@Table(name="Pessoa")
@Inheritance
public abstract class Pessoa implements Serializable {
@Id
private Integer codigo;
@Column
private String nome;
@Column
private String cpf;
@Column
private String identidade;
@Column
private String email;
@Column
private String telefone;
@Column (name = "data_nascimento")
private Date dataNascimento;
@Column
private String endereco;
Minha classe Main
public static void main(String[] args) {
//Persistindo Professor
Professor p = new Professor();
p.setMatricula(12);
p.setNome("Mauro Faccio Gonçalves");
p.setCpf("[telefone removido]");
//p.titulacaoMaxima("Doutor");
ProfessorDAO professorDAO = new ProfessorDAO();
professorDAO.salvarProfessor(p);
List<Professor> listaProfessor = professorDAO.listarProfessor();
for (Professor professor: listaProfessor) {
System.out.println(professor.getMatricula()+" - "+
professor.getNome()+ " - "+
professor.getCpf());
}
//Persistindo Aluno
Aluno a = new Aluno();
a.setMatricula(12);
a.setNome("Mauro Faccio Gonçalves");
a.setCpf("[telefone removido]");
//a.setAnoInicio(2001);
AlunoDAO alunoDAO = new AlunoDAO();
alunoDAO.salvarAluno(a);
List<Aluno> listaAluno = alunoDAO.listarAluno();
for (Aluno aluno: listaAluno) {
System.out.println(aluno.getMatricula()+" - "+
aluno.getNome()+ " - "+
aluno.getCpf());
}
A esta altura não sei se fiz certo, pois segui dicas de vários tutoriais e inclusive deste site http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping, mas são 1:22 da matina e me perdi nos códigos, não consigo resolver esta saida de erro:
init:
deps-jar:
Compiling 3 source files to /home/bruno/NetBeansProjects/IntroducaoHibernate01/build/classes
Note: /home/bruno/NetBeansProjects/IntroducaoHibernate01/src/introducaohibernate01/Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
compile:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.MappingException: Unknown entity: introducaohibernate01.Professor
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.save(Unknown Source)
at introducaohibernate01.ProfessorDAO.salvarProfessor(ProfessorDAO.java:24)
at introducaohibernate01.Main.main(Main.java:30)
Java Result: 1
debug:
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)
Como resolvo isso? Alguém pode ajudar?
Abraço!

