Duvidas de mapeamento no hibernate

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

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?

1 curtida

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

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!

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

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.

1 curtida