Esse erro ocorre quando executo o codigo, ele não consegue subir os dados
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Esse erro ocorre quando executo o codigo, ele não consegue subir os dados
Olá, Lucas!
Pelo erro apresentado nas imagens e pelo contexto da atividade, parece que você está enfrentando um problema comum ao persistir dados que envolvem relações entre entidades no Hibernate. O erro TransientPropertyValueException indica que você está tentando salvar uma entidade que possui uma referência a outra entidade que ainda não foi persistida no banco de dados.
Na sua classe AluguelEntity, você tem relações @ManyToOne com GamerEntity e JogoEntity. Antes de salvar um AluguelEntity, você precisa garantir que as instâncias de GamerEntity e JogoEntity referenciadas por ele já estejam salvas no banco de dados.
No código da sua função main(), você está buscando um user e um jogo, e então criando um novo aluguel com esses objetos. No entanto, para garantir que o user (que parece ser um GamerEntity) e o jogo (que parece ser um JogoEntity) já estejam persistidos, você deve salvá-los explicitamente antes de tentar persistir o aluguel. Se eles já foram salvos anteriormente e você está apenas recuperando-os do banco de dados, então esse não deveria ser o problema.
Outra coisa a verificar é se os objetos que você está passando para AluguelEntity estão completos e não apenas referências proxy que podem não ter sido inicializadas.
Aqui está um exemplo de como você poderia ajustar o código para garantir que as entidades relacionadas sejam persistidas antes de AluguelEntity:
fun main() {
val manager = Banco.getEntityManager()
val jogoDAO = JogosDAO(manager)
val userDAO = UserDAO(manager)
val aluguelDAO = AluguelDAO(manager)
// Iniciar uma transação
manager.transaction.begin()
// Buscar ou criar e salvar as entidades relacionadas
val user = userDAO.getItem(id: 1) ?: // Crie e salve um novo UserEntity
val jogo = jogoDAO.getItem(id: 3) ?: // Crie e salve um novo JogoEntity
// Criar o aluguel com as entidades relacionadas
val aluguel = user.alugaJogo(jogo, Periodo())
// Persistir o aluguel
aluguelDAO.addTable(aluguel)
// Commit da transação
manager.transaction.commit()
// Fechar o EntityManager
manager.close()
}
Lembre-se de que você precisa iniciar uma transação com manager.transaction.begin() e commitá-la com manager.transaction.commit() após realizar as operações de persistência. Isso garante que todas as operações sejam realizadas como uma unidade de trabalho atômica.
Espero que essas informações te ajudem a resolver o problema. Caso o erro persista, verifique se as instâncias de GamerEntity e JogoEntity estão corretas e se não há nenhum problema com a configuração das relações no Hibernate.
Espero ter ajudado e bons estudos!
Muito obrigado! Realmente o problema era referencia de objetos em outras tabelas, com esse entendimento percebi que na verdade o problema era na classe User, onde o ID não estava sendo salvo corretamente, fazendo com que no momento que o User fosse buscado, não fosse encontrado na tabela, pois ele sempre era carregado com o ID = 0
Ainda sim, isso foi muito útil para me guiar ate o problema, novamente, muito obrigado!