Olá pessoal,
Estou fazendo um projeto utilizando JPA, porém estou com um erro ao fazer a estrategia herança do tipo single table. O erro é o seguinte.
Exception in thread “main” javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: coluna “dtype” da relação “anexo” não existe
Posição: 50
Error Code: 0
Call: INSERT INTO ANEXO (DESCRICAO, POSICAONOLEMBRETE, DTYPE) VALUES (?, ?, ?)
bind => [jjjj, 22, Anexo]
Query: InsertObjectQuery(com.ads.bd2.agenda.modelo.Anexo@1045b48)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:159)
at com.ads.bd2.agenda.app.EstrategiasHeranca.main(EstrategiasHeranca.java:71)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: coluna “dtype” da relação “anexo” não existe
Posição: 50
Error Code: 0
Call: INSERT INTO ANEXO (DESCRICAO, POSICAONOLEMBRETE, DTYPE) VALUES (?, ?, ?)
bind => [jjjj, 22, Anexo]
Query: InsertObjectQuery(com.ads.bd2.agenda.modelo.Anexo@1045b48)
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1620)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:900)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:964)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:633)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2056)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:306)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:377)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:165)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:180)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:489)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:301)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:803)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1790)
at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:227)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:194)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:139)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:4264)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1441)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1531)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:278)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1169)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:134)
… 1 more
Caused by: org.postgresql.util.PSQLException: ERRO: coluna “dtype” da relação “anexo” não existe
Posição: 50
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2476)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2189)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:300)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:136)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:892)
… 33 more
As minhas classes são:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Anexo {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String descricao;
private int posicaoNoLembrete;
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getPosicaoNoLembrete() {
return posicaoNoLembrete;
}
public void setPosicaoNoLembrete(int posicaoNoLembrete) {
this.posicaoNoLembrete = posicaoNoLembrete;
}
}
@Entity
public class Imagem extends Anexo {
private String caminhoSistemaArquivos;
public String getCaminhoSistemaArquivos() {
return caminhoSistemaArquivos;
}
public void setCaminhoSistemaArquivos(String caminhoSistemaArquivos) {
this.caminhoSistemaArquivos = caminhoSistemaArquivos;
}
}
@Entity
public class Local extends Anexo {
private String cep;
private String cidade;
private String estado;
private String pais;
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getPais() {
return pais;
}
public void setPais(String pais) {
this.pais = pais;
}
}
@Entity
public class URL extends Anexo{
private String link;
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
O main:
public class EstrategiasHeranca {
public static void main(String[] args) {
EntityManager em = DAOJPA.createAndInitEntityManager(); // ---> chamando o EntityManager
em.getTransaction().begin();// ---> abrindo a transacao
DAOJPA<Anexo> daoAnexo = new DAOJPAAnexo(em);
DAOJPA<Imagem> daoImagem = new DAOJPAImagem(em);
DAOJPA<Local> daoLocal = new DAOJPALocal(em);
DAOJPA<URL> daoUrl = new DAOJPAUrl(em);
Anexo anexo = new Anexo();
anexo.setDescricao("jjjj");
anexo.setPosicaoNoLembrete(22);
Imagem imagem = new Imagem();
imagem.setCaminhoSistemaArquivos("kkkkllll");
imagem.setDescricao("Primeira tentativa");
imagem.setPosicaoNoLembrete(1);
Local local = new Local();
local.setCep("58.5000-00");
local.setCidade("Monteiro");
local.setEstado("Paraíba");
local.setPais("Brasil");
local.setDescricao("Primeira tentativa");
local.setPosicaoNoLembrete(1);
URL url = new URL();
url.setLink("https://drive.google.com/drive/folders/0B8HZqr1FiYrmcU1fY1ptejVPT00");
url.setDescricao("Primeira tentativa");
url.setPosicaoNoLembrete(1);
daoAnexo.create(anexo);
daoImagem.create(imagem);
daoLocal.create(local);
daoUrl.create(url);
em.getTransaction().commit();//---> fechando a transacao
daoAnexo.closeEntityManager();
}
}
E o xml:
<!-- PERSISTENCE PROVIDER, DE ACORDO COM A IMPLEMENTACAO JPA ADOTADA -->
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<!-- LISTAGEM DE CLASSES PERSISTENTES QUE TERAO ANNOTATIONS A SEREM PROCESSADAS -->
<class>com.ads.bd2.agenda.modelo.Anexo</class>
<class>com.ads.bd2.agenda.modelo.Imagem</class>
<class>com.ads.bd2.agenda.modelo.Local</class>
<class>com.ads.bd2.agenda.modelo.URL</class>
<properties>
<!-- PROPRIEDADES JDBC PARA O POSTGRESQL -->
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/bd2note" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="janeide" />
<!-- PROPRIEDADES ESPECÍFICAS PARA O PROVEDOR JPA ECLIPSELINK --><property
name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property
name="eclipselink.create-ddl-jdbc-file-name" value="createDDL_ddlGeneration.jdbc" />
<property
name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL_ddlGeneration.jdbc" />
<property
name='eclipselink.ddl-generation.output-mode' value='both' />
<property name="eclipselink.logging.timestamp" value="true" />
<property name="eclipselink.logging.session" value="true" />
<property name="eclipselink.logging.exceptions" value="true" />
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.ddl-generation" value="create-tables" />
</properties>
</persistence-unit>
Se alguém poder me ajudar.