Herança: Coluna "dtype" não existe - DatabaseException, PSQLException, JPA [RESOLVIDO]

Olá pessoal.
Estou com problemas para refatorar um projeto que era apenas web e agora é enterprise. Ao executar uma rotina que lista identidades, é lançada a seguinte exceção:

[b]Status do HTTP 500 - Internal Server Error

type Relatório de exceção

mensagemInternal Server Error

descriçãoO servidor encontrou um erro interno ({0}) que o impediu de atender esta solicitação.

exception

javax.servlet.ServletException:
Internal Exception: org.postgresql.util.PSQLException: ERROR: column “dtype” does not exist
Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
bind => [1 parameter bound]
Query: ReadObjectQuery(name=“solicitante” referenceClass=Pessoa )

causa-raiz

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column “dtype” does not exist
Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
bind => [1 parameter bound]
Query: ReadObjectQuery(name=“solicitante” referenceClass=Pessoa )

causa-raiz

org.postgresql.util.PSQLException: ERROR: column “dtype” does not exist
Posição: 17

observação Os rastreamentos de pilha completa da exceção e suas causas-raiz estão disponíveis nos logs de GlassFish Server Open Source Edition 4.0 .[/b]

Log do Glassfish:

WARNING:   Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
	bind => [1 parameter bound]
Query: ReadObjectQuery(name="solicitante" referenceClass=Pessoa )
	at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:679)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
	at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1995)
	at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
	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.selectOneRow(DatasourceCallQueryMechanism.java:714)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2777)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingDefaultMultipleTableSubclassRead(InheritancePolicy.java:1485)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingMultipleTableSubclassRead(InheritancePolicy.java:1515)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2727)
	at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:526)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1155)
	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1114)
	at org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:429)
	at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3207)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1797)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1779)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:115)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:102)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:165)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:226)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at br.ufscar.identidade.negocio.modelo.Identidade._persistence_get_solicitante(Identidade.java)
	at br.ufscar.identidade.negocio.modelo.Identidade.getSolicitante(Identidade.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:363)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:140)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:204)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385)
	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
	at java.lang.Thread.run(Thread.java:724)
Caused by: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1002)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:641)
	... 94 more

SEVERE:   Error Rendering View[/identidade/solicitadas.xhtml]
javax.el.ELException: /identidade/solicitadas.xhtml @36,74 value="#{identidade.solicitante.nome}": Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
	bind => [1 parameter bound]
Query: ReadObjectQuery(name="solicitante" referenceClass=Pessoa )
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385)
	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
	at java.lang.Thread.run(Thread.java:724)
Caused by: javax.el.ELException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
	bind => [1 parameter bound]
Query: ReadObjectQuery(name="solicitante" referenceClass=Pessoa )
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:368)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:140)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:204)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	... 56 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
Error Code: 0
Call: SELECT DISTINCT DTYPE FROM pessoa WHERE (id_pessoa = ?)
	bind => [1 parameter bound]
Query: ReadObjectQuery(name="solicitante" referenceClass=Pessoa )
	at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:679)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
	at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1995)
	at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
	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.selectOneRow(DatasourceCallQueryMechanism.java:714)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2777)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingDefaultMultipleTableSubclassRead(InheritancePolicy.java:1485)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingMultipleTableSubclassRead(InheritancePolicy.java:1515)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2727)
	at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:526)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1155)
	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1114)
	at org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:429)
	at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3207)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1797)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1779)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:115)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:102)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:165)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:226)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at br.ufscar.identidade.negocio.modelo.Identidade._persistence_get_solicitante(Identidade.java)
	at br.ufscar.identidade.negocio.modelo.Identidade.getSolicitante(Identidade.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:363)
	... 63 more
Caused by: org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1002)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:641)
	... 94 more

WARNING:   StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
org.postgresql.util.PSQLException: ERROR: column "dtype" does not exist
  Posição: 17
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1002)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:641)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
	at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1995)
	at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
	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.selectOneRow(DatasourceCallQueryMechanism.java:714)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2777)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingDefaultMultipleTableSubclassRead(InheritancePolicy.java:1485)
	at org.eclipse.persistence.descriptors.InheritancePolicy.selectOneRowUsingMultipleTableSubclassRead(InheritancePolicy.java:1515)
	at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2727)
	at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:526)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1155)
	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
	at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1114)
	at org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:429)
	at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3207)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1797)
	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1779)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:115)
	at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:102)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:165)
	at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:226)
	at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:88)
	at br.ufscar.identidade.negocio.modelo.Identidade._persistence_get_solicitante(Identidade.java)
	at br.ufscar.identidade.negocio.modelo.Identidade.getSolicitante(Identidade.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:363)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:140)
	at com.sun.el.parser.AstValue.getValue(AstValue.java:204)
	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385)
	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
	at java.lang.Thread.run(Thread.java:724)

As tabelas:
Pessoa

CREATE TABLE pessoa
(
  id_pessoa serial NOT NULL, -- Identificador artificial de registro.
  nome character varying(100) NOT NULL, -- Nome da pessoa.
  cpf character varying(11) NOT NULL, -- Número de CPF (Cadastro de Pessoa Física) da pessoa.
  documento_identidade character varying(12), -- Documento de identidade.
  email character varying(50) NOT NULL, -- Endereço de e-mail.
  data_nascimento date NOT NULL, -- Data de nascimento.
  sexo character(1) NOT NULL, -- Identidade de gênero: F=feminino e M=masculino.
  foto character varying(20) NOT NULL, -- Nome do arquivo da imagem da foto.
  CONSTRAINT pessoa_pkey PRIMARY KEY (id_pessoa),
  CONSTRAINT pessoa_cpf_key UNIQUE (cpf)
)

Aluno

CREATE TABLE aluno
(
  id_aluno integer NOT NULL, -- Identificador artificial de registro.
  codigo character varying(20) NOT NULL, -- Código do aluno na instituição para um determinado curso.
  data_ingresso date NOT NULL, -- Data de ingresso em um determinado curso.
  tipo character(1) NOT NULL, -- Tipo de aluno: G=graduação, P=pós-graduação, E=extensão e T=técnico.
  id_curso integer NOT NULL, -- Identificador de registro da tabela de cursos.
  CONSTRAINT aluno_pkey PRIMARY KEY (id_aluno),
  CONSTRAINT aluno_id_aluno_fkey FOREIGN KEY (id_aluno)
      REFERENCES pessoa (id_pessoa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT aluno_id_curso_fkey FOREIGN KEY (id_curso)
      REFERENCES curso (id_curso) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT aluno_codigo_tipo_key UNIQUE (codigo, tipo)
)

Identidade

CREATE TABLE identidade
(
  id_identidade serial NOT NULL, -- Identificador artificial de registro.
  codigo_barras character(14) NOT NULL, -- Código para representação gráfica em barras.
  codigo_rfid character(8) NOT NULL, -- Código UID do cartão.
  via smallint NOT NULL, -- Número da via.
  data_validade date NOT NULL, -- Data de validade.
  situacao character varying(40) NOT NULL, -- Situação da solicitação/identidade.
  id_solicitante integer NOT NULL, -- Identificador artificial de registro da tabela de pessoas para identificar o solicitante da carteirinha.
  data_solicitacao timestamp with time zone NOT NULL, -- Data de solicitação.
  id_moderador integer, -- Identificador artificial de registro da tabela de usuarios para identificar o moderador da carteirinha.
  data_moderacao timestamp with time zone, -- Data de moderação.
  id_emissor integer, -- Identificador artificial de registro da tabela de usuarios para identificar o emissor da carteirinha.
  data_emissao timestamp with time zone, -- Data de emissão (impressão).
  CONSTRAINT identidade_pkey PRIMARY KEY (id_identidade),
  CONSTRAINT identidade_id_emissor_fkey FOREIGN KEY (id_emissor)
      REFERENCES usuario (id_usuario) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT identidade_id_moderador_fkey FOREIGN KEY (id_moderador)
      REFERENCES usuario (id_usuario) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT identidade_id_solicitante_fkey FOREIGN KEY (id_solicitante)
      REFERENCES pessoa (id_pessoa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT identidade_codigo_barras_key UNIQUE (codigo_barras),
  CONSTRAINT identidade_codigo_rfid_key UNIQUE (codigo_rfid)
)

As classes:
Pessoa

@Entity
@Table(name = "pessoa", uniqueConstraints = {
   @UniqueConstraint(columnNames = {"cpf"})})
@Inheritance(strategy = InheritanceType.JOINED)
@XmlRootElement
@NamedQueries({
   @NamedQuery(name = "Pessoa.findAll", query = "SELECT p FROM Pessoa p"),
   @NamedQuery(name = "Pessoa.findByIdPessoa", query = "SELECT p FROM Pessoa p WHERE p.id = :id"),
   @NamedQuery(name = "Pessoa.findByNome", query = "SELECT p FROM Pessoa p WHERE p.nome = :nome"),
   @NamedQuery(name = "Pessoa.findByCpf", query = "SELECT p FROM Pessoa p WHERE p.cpf = :cpf"),   
   @NamedQuery(name = "Pessoa.findByEmail", query = "SELECT p FROM Pessoa p WHERE p.email = :email")})
public abstract class Pessoa implements Serializable {   
   
   private static final long serialVersionUID = 1L;
   
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Basic(optional = false)
   @Column(name = "id_pessoa", nullable = false)
   private Integer id;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 100)
   @Column(name = "nome", nullable = false, length = 100)
   private String nome;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 11)
   @Column(name = "cpf", nullable = false, length = 11)
   private String cpf;
   
   @Size(max = 12)
   @Column(name = "documento_identidade", length = 12)
   private String documentoDeIdentidade;
   
   // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="E-mail inválido")//if the field contains email address consider using this annotation to enforce field validation
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 50)
   @Column(name = "email", nullable = false, length = 50)
   private String email;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "data_nascimento", nullable = false)
   @Temporal(TemporalType.DATE)
   private Date dataDeNascimento;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "sexo", nullable = false)
   private char sexo;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 20)
   @Column(name = "foto", nullable = false, length = 20)
   private String foto;
   
   @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "solicitante", fetch = FetchType.LAZY)
   private Collection<Identidade> identidadesSolicitadas;
   
   public Pessoa() {
   }

   public Pessoa(Integer id) {
      this.id = id;
   }

   public Pessoa(Integer id, String nome, String cpf, String email, Date dataDeNascimento, char sexo, String foto) {
      this.id = id;
      this.nome = nome;
      this.cpf = cpf;
      this.email = email;
      this.dataDeNascimento = dataDeNascimento;
      this.sexo = sexo;
      this.foto = foto;
   }

   public Integer getId() {
      return id;
   }

   public void setId(Integer id) {
      this.id = id;
   }

   public String getNome() {
      return nome;
   }

   public void setNome(String nome) {
      this.nome = nome;
   }

   public String getCpf() {
      return cpf;
   }

   public void setCpf(String cpf) {
      this.cpf = cpf;
   }

   public String getDocumentoDeIdentidade() {
      return documentoDeIdentidade;
   }

   public void setDocumentoDeIdentidade(String documentoDeIdentidade) {
      this.documentoDeIdentidade = documentoDeIdentidade;
   }

   public String getEmail() {
      return email;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   public Date getDataDeNascimento() {
      return dataDeNascimento;
   }

   public void setDataDeNascimento(Date dataDeNascimento) {
      this.dataDeNascimento = dataDeNascimento;
   }

   public char getSexo() {
      return sexo;
   }

   public void setSexo(char sexo) {
      this.sexo = sexo;
   }

   public String getFoto() {
      return foto;
   }

   public void setFoto(String foto) {
      this.foto = foto;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (id != null ? id.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      // TODO: Warning - this method won't work in the case the id fields are not set
      if (!(object instanceof Pessoa)) {
         return false;
      }
      Pessoa other = (Pessoa) object;
      if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "br.ufscar.identidade.negocio.modelo.Pessoa[ idPessoa=" + id + " ]";
   }

   @XmlTransient
   public Collection<Identidade> getIdentidadeCollection() {
      return identidadesSolicitadas;
   }

   public void setIdentidadeCollection(Collection<Identidade> identidadeCollection) {
      this.identidadesSolicitadas = identidadeCollection;
   }
   
}

Aluno

@Entity
@Table(name = "aluno", uniqueConstraints = {
   @UniqueConstraint(columnNames = {"codigo", "tipo"})})
@PrimaryKeyJoinColumn(name = "id_aluno")
@XmlRootElement
@NamedQueries({
   @NamedQuery(name = "Aluno.findAll", query = "SELECT a FROM Aluno a"),
   @NamedQuery(name = "Aluno.findByCodigo", query = "SELECT a FROM Aluno a WHERE a.codigo = :codigo")})
public class Aluno extends Pessoa implements Serializable {
   
   private static final long serialVersionUID = 1L;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 20)
   @Column(name = "codigo", nullable = false, length = 20)
   private String codigo;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "data_ingresso", nullable = false)
   @Temporal(TemporalType.DATE)
   private Date dataDeIngresso;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "tipo", nullable = false)
   private char tipo;
   
   @JoinColumn(name = "id_curso", referencedColumnName = "id_curso", nullable = false)
   @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, optional = false, fetch = FetchType.LAZY)
   private Curso curso;

   public Aluno() {
   }

   public String getCodigo() {
      return codigo;
   }

   public void setCodigo(String codigo) {
      this.codigo = codigo;
   }

   public Date getDataDeIngresso() {
      return dataDeIngresso;
   }

   public void setDataDeIngresso(Date dataDeIngresso) {
      this.dataDeIngresso = dataDeIngresso;
   }

   public char getTipo() {
      return tipo;
   }

   public void setTipo(char tipo) {
      this.tipo = tipo;
   }

   public Curso getCurso() {
      return curso;
   }

   public void setCurso(Curso curso) {
      this.curso = curso;
   }

}

Identidade

@Entity
@Table(name = "identidade", uniqueConstraints = {
   @UniqueConstraint(columnNames = {"codigo_barras"}),
   @UniqueConstraint(columnNames = {"codigo_rfid"})})
@XmlRootElement
@NamedQueries({
   @NamedQuery(name = "Identidade.findAll", query = "SELECT i FROM Identidade i"),
   @NamedQuery(name = "Identidade.findByIdIdentidade", query = "SELECT i FROM Identidade i WHERE i.id = :id"),
   @NamedQuery(name = "Identidade.findByCodigoBarras", query = "SELECT i FROM Identidade i WHERE i.codigoDeBarras = :codigoDeBarras"),
   @NamedQuery(name = "Identidade.findByCodigoRfid", query = "SELECT i FROM Identidade i WHERE i.codigoRfid = :codigoRfid"),   
   @NamedQuery(name = "Identidade.findBySituacao", query = "SELECT i FROM Identidade i WHERE i.situacao = :situacao"),
   @NamedQuery(name = "Identidade.findByDataSolicitacao", query = "SELECT i FROM Identidade i WHERE i.dataDeSolicitacao = :dataDeSolicitacao"),
   @NamedQuery(name = "Identidade.findByDataModeracao", query = "SELECT i FROM Identidade i WHERE i.dataDeModeracao = :dataDeModeracao"),
   @NamedQuery(name = "Identidade.findByDataEmissao", query = "SELECT i FROM Identidade i WHERE i.dataDeEmissao = :dataDeEmissao")})
public class Identidade implements Serializable {
   
   private static final long serialVersionUID = 1L;
   
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Basic(optional = false)
   @Column(name = "id_identidade", nullable = false)
   private Integer id;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 14)
   @Column(name = "codigo_barras", nullable = false, length = 14)
   private String codigoDeBarras;
   
   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 8)
   @Column(name = "codigo_rfid", length = 8)
   private String codigoRfid;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "via", nullable = false)
   private short via;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "data_validade", nullable = false)
   @Temporal(TemporalType.DATE)
   private Date dataDeValidade;
   
   @Basic(optional = false)
   @NotNull   
   @Column(name = "situacao", nullable = false, length = 40)
   @Enumerated(EnumType.STRING)
   private SituacaoEnum situacao;
   
   @Basic(optional = false)
   @NotNull
   @Column(name = "data_solicitacao", nullable = false)
   @Temporal(TemporalType.TIMESTAMP)
   private Date dataDeSolicitacao;
   
   @Column(name = "data_moderacao")
   @Temporal(TemporalType.TIMESTAMP)
   private Date dataDeModeracao;
   
   @Column(name = "data_emissao")
   @Temporal(TemporalType.TIMESTAMP)
   private Date dataDeEmissao;
   
   @JoinTable(name = "identidade_recusa", joinColumns = {
      @JoinColumn(name = "id_identidade", referencedColumnName = "id_identidade", nullable = false)}, inverseJoinColumns = {
      @JoinColumn(name = "id_motivorecusa", referencedColumnName = "id_motivorecusa", nullable = false)})
   @ManyToMany(fetch = FetchType.LAZY)
   private Collection<MotivoRecusa> motivosDeRecusa;
   
   @JoinColumn(name = "id_emissor", referencedColumnName = "id_usuario")
   @ManyToOne(fetch = FetchType.LAZY)
   private Usuario emissor;
   
   @JoinColumn(name = "id_moderador", referencedColumnName = "id_usuario")
   @ManyToOne(fetch = FetchType.LAZY)
   private Usuario moderador;
   
   @JoinColumn(name = "id_solicitante", referencedColumnName = "id_pessoa", nullable = false)
   @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, optional = false, fetch = FetchType.LAZY)
   private Pessoa solicitante;

   public Identidade() {
   }

   public Identidade(Integer idIdentidade) {
      this.id = idIdentidade;
   }

   public Identidade(Integer id, String codigoBarras, String codigoRfid, short via, Date dataDeValidade, SituacaoEnum situacao, Date dataDeSolicitacao) {
      this.id = id;
      this.codigoDeBarras = codigoBarras;
      this.codigoRfid = codigoRfid;
      this.via = via;
      this.dataDeValidade = dataDeValidade;
      this.situacao = situacao;
      this.dataDeSolicitacao = dataDeSolicitacao;
   }

   public Integer getId() {
      return id;
   }

   public void setId(Integer id) {
      this.id = id;
   }

   public String getCodigoDeBarras() {
      return codigoDeBarras;
   }

   public void setCodigoDeBarras(String codigoDeBarras) {
      this.codigoDeBarras = codigoDeBarras;
   }

   public String getCodigoRfid() {
      return codigoRfid;
   }

   public void setCodigoRfid(String codigoRfid) {
      this.codigoRfid = codigoRfid;
   }

   public short getVia() {
      return via;
   }

   public void setVia(short via) {
      this.via = via;
   }

   public Date getDataDeValidade() {
      return dataDeValidade;
   }

   public void setDataDeValidade(Date dataDeValidade) {
      this.dataDeValidade = dataDeValidade;
   }

   public SituacaoEnum getSituacao() {
      return situacao;
   }

   public void setSituacao(SituacaoEnum situacao) {
      this.situacao = situacao;
   }

   public Date getDataDeSolicitacao() {
      return dataDeSolicitacao;
   }

   public void setDataDeSolicitacao(Date dataDeSolicitacao) {
      this.dataDeSolicitacao = dataDeSolicitacao;
   }

   public Date getDataDeModeracao() {
      return dataDeModeracao;
   }

   public void setDataDeModeracao(Date dataDeModeracao) {
      this.dataDeModeracao = dataDeModeracao;
   }

   public Date getDataDeEmissao() {
      return dataDeEmissao;
   }

   public void setDataDeEmissao(Date dataDeEmissao) {
      this.dataDeEmissao = dataDeEmissao;
   }

   @XmlTransient
   public Collection<MotivoRecusa> getMotivosDeRecusa() {
      return motivosDeRecusa;
   }

   public void setMotivosDeRecusa(Collection<MotivoRecusa> motivosDeRecusa) {
      this.motivosDeRecusa = motivosDeRecusa;
   }

   public Usuario getEmissor() {
      return emissor;
   }

   public void setEmissor(Usuario usuario) {
      this.emissor = usuario;
   }

   public Usuario getModerador() {
      return moderador;
   }

   public void setModerador(Usuario usuario) {
      this.moderador = usuario;
   }

   public Pessoa getSolicitante() {
      return solicitante;
   }

   public void setSolicitante(Pessoa pessoa) {
      this.solicitante = pessoa;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (id != null ? id.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      // TODO: Warning - this method won't work in the case the id fields are not set
      if (!(object instanceof Identidade)) {
         return false;
      }
      Identidade other = (Identidade) object;
      if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "br.ufscar.identidade.negocio.modelo.Identidade[ idIdentidade=" + id + " ]";
   }
   
}

Percebam que não estou usando @DiscriminatorColumn(name = “tipo”, length = 1) na classe Pessoa e @DiscriminatorValue(value = “A”) na classe Aluno, do mesmo modo que era no projeto web por exemplo, de propósito. A intenção depois é extender a classe Funcionário da classe abstrata Pessoa também, uma vez que no negócio deste projeto, uma pessoa por ser tanto aluno quanto funcionário ao mesmo tempo.

Projeto usando:

  • Glassfish 4 (com EclipseLink 2.1)
  • PostgreSQL 9.1 (driver v.903 JDBC 4)

Att.

DTYPE é uma coluna que o framework adiciona se você não especificar a anotação @DiscriminatorColumn. Não há como você não usar ou a DTYPE ou a @DiscriminatorColumn. O erro vai dar porque você retirou essa coluna da tabela.

A questão é que a modelagem que você está imaginando não está correta e NÃO há como existir uma única instância de pessoa associada com uma instância de Aluno e outra de Funcionario ao mesmo tempo (ou seja, não existe sobreposição total em OO como existe no relacional estendido). Dessa forma, para modelar essa situação que você deseja você deve criar uma nova classe, chamada Papel (por exemplo), e sua classe Pessoa faz referência a ela com cardinalidade 1xN (uma pessoa tem vários papéis). As classes Aluno e Funcionário estendem Papel (usando a @DiscriminatorColumn ou a DTYPE, com campo correspondente na tabela). Aí você chega no desejado: uma pessoa pode assumir vários papéis e, ao mesmo tempo, os dados de pessoa são mantidos únicos.

Espero ter ajudado!

OK. Entendido! =)

Conversando com um conhecido, ele já havia me dado um toque sobre a possibilidade de um problema conceitual na modelagem do projeto pouco antes de você postar. Vou fazer alguns testes e retorno!

Vlw reolca!

Só para fechar o tópico, o problema é conceitual mesmo. Do modo que estava fazendo uma mesma pessoa não pode ser aluno e funcionário ao mesmo tempo. Para isto, alterei a tabela Pessoa renomeando para Solicitante (me pareceu melhor semanticamente) e criei uma chave única com CPF e Tipo. Ou seja, haverão 2 registros no BD para a mesma pessoa (se necessário), um como aluno (CPF + tipo = A) e outro como funcionário (CPF + tipo = F).

Vlw.