Fala galera,
Comecei a usar o JPA agora, e estou com um probleminha aqui..
Quando tento dar um persist em um objeto, ele adiciona um campo DTYPE no insert e gera uma SQLException.
O que é esse DTYPE?
Tenho uma estrutura simples com 3 classes, uma classe pai e duas subclasses. Pessoa -> Física, Jurídica.
Segue abaixo os códigos:
Classe pai:@Entity
@Table (name= "tbpessoa")
@Inheritance (strategy=InheritanceType.JOINED)
public class Pessoa {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
int codigo;
private String nome;
private String telefone;
private String endereco;
public Pessoa(){
super();
}
public Pessoa(String umNome, String umTelefone, String umEndereco) {
super();
// this.codigo = umCodigo;
this.nome = umNome;
this.telefone = umTelefone;
this.endereco = umEndereco;
}
public long getCodigo() {
return codigo;
}
public void setCodigo(int umCodigo) {
this.codigo = umCodigo;
....
@Entity
@Table (name="tbfisica")
public class Fisica extends Pessoa {
private String rg;
private String cpf;
public Fisica() {
super();
}
public Fisica(String umRg, String umCpf) {
super();
rg = umRg;
cpf = umCpf;
}
public String getRG() {
return rg;
}
...
Classe de teste:
public class ControleDePessoas {
public ControleDePessoas(){
}
public static void cadastrarPessoa(EntityManager em){
Juridica j = new Juridica();
j.setNome("Pessoa Juridica");
j.setTelefone("3222-2222");
j.setInscricaoEstadual("123123.123123");
j.setEndereco("Uma rua qualquer");
j.setCNPJ("222.2222-2222");
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(j);
tx.commit();
}
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("orale");
EntityManager em = factory.createEntityManager();
cadastrarPessoa(em);
}
}
Está gerando a exceção...
Exception in thread "main" javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060908)): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Unknown column 'DTYPE' in 'field list'Error Code: 1054
Call:INSERT INTO tbpessoa (NOME, ENDERECO, TELEFONE, DTYPE) VALUES (?, ?, ?, ?)
bind => [Pessoa Juridica, Uma rua qualquer, 3222-2222, Juridica]
Query:InsertObjectQuery(br.com.neocart.negocio.entidades.Juridica@29e357)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:109)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:45)
at br.com.neocart.comuns.ControleDePessoas.cadastrarPessoa(ControleDePessoas.java:34)
at br.com.neocart.comuns.ControleDePessoas.main(ControleDePessoas.java:43)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.8 (Build 060908)): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Unknown column 'DTYPE' in 'field list'Error Code: 1054
Call:INSERT INTO tbpessoa (NOME, ENDERECO, TELEFONE, DTYPE) VALUES (?, ?, ?, ?)
bind => [Pessoa Juridica, Uma rua qualquer, 3222-2222, Juridica]
Query:InsertObjectQuery(br.com.neocart.negocio.entidades.Juridica@29e357)
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:295)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:639)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:688)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:477)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:437)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:675)
....
Alguém poderia me dar uma força? :D
Abraços.
