sql >> Database >  >> RDS >> Mysql

Hoe Spring Boot configureren voor het werken met twee databases?

*ToMany Collections zijn standaard lui in Hibernate &JPA. De fout is dat Jackson de OneToMany probeert te serialiseren wanneer de entiteitsmanager (ook wel sessie in slaapstand genoemd) is gesloten. Daarom kunnen luie verzamelingen niet worden opgehaald.

Spring Boot met JPA biedt standaard een OpenEntityManagerInViewFilter voor de primaire EM. Dit maakt alleen-lezen DB-toegang mogelijk, maar werkt standaard alleen voor de primaire EM.

Je hebt 3 opties:

1) U kunt een join-fetch toevoegen, b.v. Hoe werkt de FetchMode in Spring Data JPA

2) U kunt een OpenEntityManagerInViewFilter voor de niet-primaire entiteitbeheerder toevoegen en aan uw context toevoegen.

Houd er rekening mee dat dit een uitdaging met zich meebrengt, voor elke Bar en Foo-instantie gaat uw app terug naar de database om de OneToMany op te halen. Dit is het deel dat niet werkt voor Bar, maar voor Foo. Dit impliceert een schaalbaarheidsprobleem (door sommigen het N + 1-probleem genoemd) omdat je voor elke foo en bar een extra query uitvoert, die traag wordt voor niet-triviale hoeveelheden Foos en Bars.

3) Een alternatief is om je verzameling op Bar en Foo enthousiast te maken (zie deze https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ) maar dit moet zorgvuldig worden geanalyseerd als u zich zorgen maakt over schaalbaarheid.

Ik zou optie #1 aanraden.



  1. Hoe AUTO_INCREMENT te lezen en te resetten in MySQL

  2. Hoe een query in postgresql stoppen / beëindigen?

  3. Hoe krijg ik een tabeldefinitie in Oracle?

  4. VERWIJDER alle dubbele onderwerpen met enkele voorwaarden