Esse erro ocorre quando executo o codigo, ele não consegue subir os dados
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!