Duvidas de mapeamento no hibernate

5 respostas
javaprogramaçãohibernate
A

boa noite a todos! estou estudando spring boot e hibernate e surgiu a seguinte duvida

ao tentar implementar um esquema de banco de dados de uma biblioteca, surgiu a seguinte necessidade.
estou persistindo todos os objetos a baixo no banco, no entanto, na linha 74 eu modifico o status do objeto Book, eu gostaria que essa modificacao ficasse gravada no Objeto Book, no momento em que eu gravo o objeto loan1 na linha 82

segue a baixo os objetos envolvidos no processo

esse é o meu objeto Loan, que contem uma lista de ItensLoan

e esse é meu objeto ItensLoan, que possui um objeto Book

e abaixo o meu Objeto Book

5 Respostas

J

Já faz um bom tempo que não trabalho com um mapeamento de entidades assim, então pode ser que minha resposta não esteja totalmente correta, mas se não me engano, o cascade ALL aplicado para a lista ItemLoan da entidade Loan não vai refletir para o atributo Book, acredito que no atributo Book da entidade ItemLoan você precisaria colocar o cascade ALL para que o estado dos objetos book fossem persistidos.

Já chegou a testar dessa forma?

A

Boa noite @Jonathan_Medeiros , sim ja tentei, ao fazer isso obtenho o erro

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.maralto.biblioteca.domain.Book; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.maralto.biblioteca.domain.Book

eu nao preciso fazer nenhum mapeamento de ItemLoan no minha classe Book? fiquei com essa duvida

J

Este erro acontece porquê você já salvou ou livros na linha 65, e isso faz com que os objetos de book assumam o estado detached, ou seja, estão fora do contexto de persistência.

Você teria que recuperar os livros persistidos para depois manipular os status deles.

Faz um teste comentando a linha 65 e veja como o código se comporta!

A

Oi, @Jonathan_Medeiros , os livros realemente devem estar salvos, a ideia é fazer um update “automatico” neles no momento em que vou grava-los novamente na linha 82

J

Sim, só que para atualizá-los você precisa antes colocá-los no contexto de persistência novamente, que no caso seria buscá-los no banco, atualizar os status e em seguida persistir!

Da forma como está eles já foram enviados para o banco e descartados do contexto de persistência, por isso qualquer manipulação feita após terem sido salvos vão causar o erro de objetos detached.

Criado 12 de dezembro de 2022
Ultima resposta 12 de dez. de 2022
Respostas 5
Participantes 2