2
respostas

Ao chegar no último capítulo sobre chaves primárias, me deparei com este erro..., preciso de ajuda!

abr. 30, 2025 12:51:01 PM org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
INFO: HHH000327: Error performing load command
org.hibernate.WrongClassException: Object [id=1] was not of the specified subclass [br.com.mycompany.loja.model.Produto] : Discriminator: 
    at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.getConcreteEntityTypeName(EntityReferenceInitializerImpl.java:455)
    at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:253)
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:102)
    at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:288)
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractRows(ResultSetProcessorImpl.java:157)
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:94)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)
    at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)
    at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4442)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4432)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:569)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:537)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:332)
    at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:113)
    at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1186)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1175)
    at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:193)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2786)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2767)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2723)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2767)
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3322)
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3284)
    at br.com.mycompany.loja.dao.ProdutoDao.consultarPorId(ProdutoDao.java:38)
    at br.com.mycompany.loja.main.Usuario.licao_pratica_3(Usuario.java:96)
    at br.com.mycompany.loja.main.Usuario.main(Usuario.java:26)
2 respostas

significa que o objeto com ID 1 existe no banco de dados, mas não pertence à classe Produto, ou seja, ele está associado a outra entidade no mapeamento do Hibernate — provavelmente em uma herança com discriminator (coluna que indica o tipo real da entidade).

  • Causas comuns Uso de herança com @Inheritance(strategy = InheritanceType.SINGLE_TABLE)

O Hibernate armazena várias classes em uma única tabela, diferenciando-as por uma coluna @DiscriminatorColumn.

Discriminator inválido ou ausente no banco

Se o valor da coluna de discriminação estiver nulo ou com um valor inesperado, o Hibernate não consegue associar ao tipo correto.

O ID existe, mas não pertence à classe Produto

Pode ser que o objeto de ID 1 seja de uma subclasse ou superclasse de Produto.

Eu agradeço o esclarecimento, professor!