sql >> Databasteknik >  >> RDS >> Mysql

Hur konfigurerar man Spring boot för arbete med två databaser?

*ToMany Collections är lata som standard i Hibernate &JPA. Felet beror på att Jackson försöker serialisera OneToMany när enhetshanteraren (alias session i hibernate-speak) är stängd. Därför kan lata samlingar inte hämtas.

Spring Boot med JPA tillhandahåller som standard ett OpenEntityManagerInViewFilter för den primära EM. Detta tillåter skrivskyddad DB-åtkomst, men fungerar som standard bara för den primära EM.

Du har 3 alternativ:

1) Du kan lägga till en joinhämtning, t.ex. Hur fungerar FetchMode i Spring Data JPA

2) Du kan lägga till ett OpenEntityManagerInViewFilter för den icke primära enhetshanteraren och lägga till det i ditt sammanhang.

Observera att detta innebär en utmaning, för varje Bar och Foo-instans kommer din app att gå tillbaka till databasen för att hämta OneToMany. Det här är den del som inte fungerar för Bar, utan för Foo. Detta innebär ett skalbarhetsproblem (av vissa kallat N + 1-problemet) eftersom du för varje foo och bar kör en ytterligare fråga, som blir långsam för icke-triviala mängder Foos och Bars.

3) Ett alternativ är att göra din samling på Bar and Foo ivrig (se denna https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ) men detta måste analyseras noggrant om skalbarhet är ett problem för dig.

Jag skulle rekommendera alternativ 1.



  1. Användarkontohantering, roller, behörigheter, autentisering PHP och MySQL

  2. EF5:Kan inte bifoga filen '{0}' som databas '{1}'

  3. Hur lägger man till AUTO_INCREMENT i en befintlig kolumn?

  4. Synkronisera alla användarroller mellan två Wordpress-installationer som delar samma wp_users och wp_usermeta-tabeller.