Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

No vídeo relacionando gamer a plano está dando a seguinte mensagem de erro

org.hibernate.HibernateException: Getter methods of lazy classes cannot be final: br.com.alura.alugames.dados.PlanoEntity#getId at org.hibernate.proxy.pojo.ProxyFactoryHelper.validateGetterSetterMethodProxyability(ProxyFactoryHelper.java:96) at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:97) at org.hibernate.tuple.entity.AbstractEntityTuplizer.(AbstractEntityTuplizer.java:160) at org.hibernate.tuple.entity.PojoEntityTuplizer.(PojoEntityTuplizer.java:53) at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:432) at org.hibernate.persister.entity.AbstractEntityPersister.(AbstractEntityPersister.java:612) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:126) at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:181) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:312) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1410) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at br.com.alura.alugames.dados.Banco.getEntityManager(Banco.kt:25) at br.com.alura.alugames.principal.TesteGamerBancoKt.main(testeGamerBanco.kt:11) at br.com.alura.alugames.principal.TesteGamerBancoKt.main(testeGamerBanco.kt)

1 resposta
solução!

Oi Fernando, tudo bem?

Pelo que vejo, você está enfrentando um problema com o Hibernate, que está reclamando que o método getter da sua classe não pode ser final. Isso geralmente ocorre quando você está usando a estratégia de carregamento "lazy" (preguiçoso) em suas entidades, e o Hibernate precisa criar proxies (substitutos) para essas entidades. No entanto, ele não pode fazer isso se os métodos getter forem finais, pois eles não podem ser sobrescritos.

Para resolver isso, você precisa remover a palavra-chave final dos métodos getter em sua classe PlanoEntity. Por exemplo, se o seu código se parece com isso:

class PlanoEntity {
    final fun getId(): Long {
        // ...
    }
}

Você deve mudar para:

class PlanoEntity {
    fun getId(): Long {
        // ...
    }
}

Isso deve permitir que o Hibernate crie proxies para suas entidades e resolva o problema.

Um abraço e bons estudos.