Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como configurar o Spring boot para trabalhar com dois bancos de dados?


*ToMany Collections são preguiçosos por padrão no Hibernate e JPA. O erro é porque Jackson está tentando serializar o OneToMany quando o gerenciador de entidades (também conhecido como sessão em hibernate-speak) é fechado. Portanto, coleções preguiçosas não podem ser recuperadas.

Spring Boot com JPA por padrão fornece um OpenEntityManagerInViewFilter para o EM primário. Isso permite acesso ao banco de dados somente leitura, mas, por padrão, só funciona para o EM primário.

Você tem 3 opções:

1) Você pode adicionar uma busca de junção, por exemplo Como funciona o FetchMode no Spring Data JPA

2) Você pode adicionar um OpenEntityManagerInViewFilter para o gerenciador de entidade não primário e adicioná-lo ao seu contexto.

Observe que isso implica um desafio, para cada instância Bar e Foo, seu aplicativo voltará ao banco de dados para recuperar o OneToMany. Esta é a parte que não está funcionando para Bar, mas é para Foo. Isso implica em um problema de escalabilidade (chamado de problema N + 1 por alguns), pois para cada foo e bar, você executa uma consulta adicional, que ficará lenta para quantidades não triviais de Foos e Bars.

3) Uma alternativa é deixar sua coleção no Bar e Foo ansiosa (veja isso https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ), mas isso precisa ser analisado com cuidado se a escalabilidade for uma preocupação para você.

Eu recomendaria a opção #1.