Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak skonfigurować Spring boot do pracy z dwoma bazami danych?

* Kolekcje ToMany są domyślnie leniwe w Hibernate i JPA. Błąd polega na tym, że Jackson próbuje serializować OneToMany, gdy menedżer encji (aka sesja w mowie hibernacji) jest zamknięty. Dlatego nie można pobrać leniwych kolekcji.

Spring Boot z JPA domyślnie zapewnia OpenEntityManagerInViewFilter dla podstawowego EM. Pozwala to na dostęp do bazy danych tylko do odczytu, ale domyślnie działa tylko dla podstawowego EM.

Masz 3 opcje:

1) Możesz dodać pobranie sprzężenia, np. Jak działa tryb FetchMode w Spring Data JPA

2) Możesz dodać OpenEntityManagerInViewFilter dla niepodstawowego menedżera encji i dodać go do swojego kontekstu.

Pamiętaj, że oznacza to wyzwanie, ponieważ dla każdej instancji Bar i Foo Twoja aplikacja wróci do bazy danych, aby pobrać OneToMany. To jest część, która nie działa dla Bara, ale jest dla Foo. To implikuje problem skalowalności (nazywany przez niektórych problemem N+1), ponieważ dla każdego foo i baru uruchamiasz dodatkowe zapytanie, które będzie zwalniać dla nietrywialnych ilości Foos i Bars.

3) Alternatywą jest sprawienie, by Twoja kolekcja na Bar i Foo była chętna (zobacz ten https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ), ale należy to dokładnie przeanalizować, jeśli skalowalność jest dla Ciebie w ogóle problemem.

Polecam opcję nr 1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj kierunek indeksu ze schematu informacyjnego w MySQL

  2. PHP MySQL i geolokalizacja

  3. Wyjątek hibernacji w zapytaniu łączenia krzyżowego MySQL

  4. Jaki jest najlepszy sposób na uniknięcie danych wprowadzanych przez użytkownika dla wyrażeń regularnych w MySQL?

  5. MySql Connector 6.8.2 RC, Entity Framework 6 i Code First