Problema com JPA/TopLink - "DTYPE"

1 resposta
L

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.

1 Resposta

M

Já deve ter sido resolvido, mas para não deixar o post sem solução. :slight_smile:

Este link deve esclarecer: http://www.guj.com.br/posts/list/54299.java

t+

Criado 17 de dezembro de 2007
Ultima resposta 5 de jan. de 2008
Respostas 1
Participantes 2