Refresh no JPA com Hibernate em entidade com super classe abstrata

0 respostas
anderson_lr

Pessoal,

Tenho as seguintes classes:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Pergunta extends EntidadeGenerica implements Serializable {
...

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name="pergunta_id")
public abstract class PerguntaMensuravel extends Pergunta implements Serializable {
...

@Entity
@PrimaryKeyJoinColumn(name="perguntaMensuravel_id")
public class PerguntaMensuravelComUnicaOpcaoDeResposta extends PerguntaMensuravel implements Serializable {
...

O problema é que quando eu persisto a classe “PerguntaMensuravelComUnicaOpcaoDeResposta” e depois dou um “this.em.refresh(entidade);” o Hibernate me dá o seguinte erro:

Caused by: javax.persistence.PersistenceException: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: projetobase.entidades.Pergunta
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
        at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:276)
        at projetobase.modelos.daos.DaoGenerico.persistir(DaoGenerico.java:226)
        at webapplication.controladores.PerguntaMensuravelComUnicaOpcaoDeRespostaController.persistir(PerguntaMensuravelComUnicaOpcaoDeRespostaController.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
        ... 52 more
Caused by: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: projetobase.entidades.Pergunta
        at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:78)
        at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:100)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:351)
        at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3606)
        at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1275)
        at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1264)
        at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1299)
        at org.hibernate.loader.Loader.getRow(Loader.java:1206)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
        at org.hibernate.loader.Loader.doQuery(Loader.java:701)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
        at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
        at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
        at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
        at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
        at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
        at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
        at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
        at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
        at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
        at org.hibernate.type.EntityType.resolve(EntityType.java:379)
        at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
        at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
        at org.hibernate.loader.Loader.doQuery(Loader.java:729)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
        at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
        at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
        at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:123)
        at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:39)
        at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:902)
        at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:886)
        at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:270)

Alguém poderia me dizer o que pode ser? Até onde eu sei não há problemas em ter uma herança em três níveis sendo que as classes dois dois primeiros níveis são abstratas. Contro com o apoio de vocês.

Criado 4 de agosto de 2010
Respostas 0
Participantes 1