Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment configurer Spring boot pour travailler avec deux bases de données ?

*Les collections ToMany sont paresseuses par défaut dans Hibernate et JPA. L'erreur est due au fait que Jackson essaie de sérialiser le OneToMany lorsque le gestionnaire d'entités (alias session en hibernation) est fermé. Par conséquent, les collections paresseuses ne peuvent pas être récupérées.

Spring Boot avec JPA fournit par défaut un OpenEntityManagerInViewFilter pour l'EM primaire. Cela permet un accès en lecture seule à la base de données, mais ne fonctionne par défaut que pour l'EM principal.

Vous avez 3 options :

1) Vous pouvez ajouter une récupération de jointure, par ex. Comment fonctionne le FetchMode ? dans Spring Data JPA

2) Vous pouvez ajouter un OpenEntityManagerInViewFilter pour le gestionnaire d'entité non principal et l'ajouter à votre contexte.

Attention, cela implique un challenge, pour chaque instance de Bar and Foo, votre application retournera dans la base de données pour récupérer le OneToMany. C'est la partie qui ne fonctionne pas pour Bar, mais pour Foo. Cela implique un problème d'évolutivité (appelé le problème N + 1 par certains) car pour chaque foo et bar, vous exécutez une requête supplémentaire, qui deviendra lente pour des quantités non négligeables de Foos et Bars.

3) Une alternative est de rendre votre collection sur Bar and Foo impatiente (voir ceci https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ) mais cela doit être analysé avec soin si l'évolutivité est une préoccupation pour vous.

Je recommanderais l'option 1.