Gente,
Alguem ja uso a anotação @MappedSuperclass?
Como usar em Herarquias?
Alguem tem algum exemplo?
Ela funciona direitinho, algumas pessoas dizem que ela possui bugs? Isso confere?
Um abraço
Gente,
Alguem ja uso a anotação @MappedSuperclass?
Como usar em Herarquias?
Alguem tem algum exemplo?
Ela funciona direitinho, algumas pessoas dizem que ela possui bugs? Isso confere?
Um abraço
Você já deu uma olhada no tutorial do Hibernate?
http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf
Aqui você encontrará alguns exemplos.
Já sim implemente ate um exemplo:
package bean;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.MappedSuperclass;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import org.hibernate.annotations.Entity;
/**
* @author mirla.braga
* @since 30/05/2007
*/
@Entity
@MappedSuperclass
@TableGenerator(name = "PESSOA_GEN", table = "GENERATOR_ID", pkColumnName = "ID", valueColumnName = "VALOR", pkColumnValue = "PESSOA", allocationSize = 1)
@Table(name="PESSOA")
public class Pessoa {
@GeneratedValue(strategy = GenerationType.TABLE, generator = "PESSOA_GEN")
protected Integer id;
protected String nome_curto;
protected String nome_completo;
public Pessoa(){
}
public Pessoa(String nome_curto, String nome_completo){
this.nome_curto = nome_curto;
this.nome_completo = nome_completo;
}
gets e sets (...)
------------
package bean;
import javax.persistence.AttributeOverride;
import javax.persistence.Column;
import javax.persistence.Table;
import org.hibernate.annotations.Entity;
/**
* @author mirla.braga
* @since 30/05/2007
*/
@Entity
@Table(name="FUNCIONARIO")
public class Funcionario extends Pessoa{
@AttributeOverride(column=@Column, name="")
private Integer id;
private String matricula;
private String cargo;
public Funcionario(){
}
public Funcionario(String nome_curto, String nome_completo, String matricula, String cargo){
nome_curto = super.nome_curto;
nome_completo = super.nome_completo;
// super(nome_curto, nome_completo);
this.matricula = matricula;
this.cargo = cargo;
}
gets e sets(...)
e depois tentei persistir
public class MainClass {
private static EntityManagerFactory emf = Persistence
.createEntityManagerFactory("exemplo");
private static EntityTransaction etTrans;
public static EntityManager em;
public MainClass() {
em = emf.createEntityManager();
etTrans = em.getTransaction();
etTrans.begin();
// Funcionario funcionario = new Funcionario("Mirla Braga", "Mirla Rafaela R. Braga", "0261782", "Prog. Estagiaria");
Funcionario funcionario = new Funcionario();
funcionario.setCargo("est. pro");
funcionario.setMatricula("0261782");
funcionario.setNome_completo("Mirla Braga");
funcionario.setNome_curto("Mirlinha");
em.persist(funcionario);
etTrans.commit();
em.close();
}
/**
* @param args
* @autor mirla.braga
* @since 30/05/2007
*/
public static void main(String[] args) {
System.out.println("========= Cadastro Funcionario ===========");
new MainClass();
System.out
.println("========= Cadastro Efetuado com Sucesso ===========");
}
}
So que esta tando o erro:
========= Cadastro Funcionario ===========
DEBUG 30-05 11:08:14,094 (SessionImpl.java:<init>:220) -opened session at timestamp: [telefone removido]
DEBUG 30-05 11:08:14,097 (JDBCTransaction.java:begin:54) -begin
DEBUG 30-05 11:08:14,097 (ConnectionManager.java:openConnection:415) -opening JDBC connection
DEBUG 30-05 11:08:14,097 (JDBCTransaction.java:begin:59) -current autocommit status: true
DEBUG 30-05 11:08:14,098 (JDBCTransaction.java:begin:62) -disabling autocommit
Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: bean.Funcionario
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:215)
at main.MainClass.<init>(MainClass.java:37)
at main.MainClass.main(MainClass.java:51)
e eu naum sei o que significa
Heelp
Verifique se as classes estão especificadas no arquivo persistence.xml
depois envia o exemplo corrigido!
abraços!
Talvez não seja a causa raíz de seu problema, mas por definição MappedSuperclass não são entidades.
Essa classe não será persistida. MappedSuperclasses é para designar que uma entidade herda de uma classe que não é entidade.
Os atributos da MappedSuperclass serão persistidos todos nas classes filhas, como se fosse um “embbeded”.
Portanto, não entendi pq colocou @Table(name=“FUNCIONARIO”).
Rodrigo Carvalho Rezende
http://www.rodrigorezende.net