sql >> Databáze >  >> RDS >> Mysql

Jak nakonfigurovat Spring boot pro práci se dvěma databázemi?

*ToMany Collections jsou ve výchozím nastavení v Hibernate a JPA líné. Chyba je způsobena tím, že se Jackson pokouší serializovat OneToMany, když je zavřený správce entity (neboli relace v režimu hibernace). Líné kolekce tedy nelze načíst.

Spring Boot s JPA ve výchozím nastavení poskytuje OpenEntityManagerInViewFilter pro primární EM. To umožňuje přístup k databázi pouze pro čtení, ale ve výchozím nastavení funguje pouze pro primární EM.

Máte 3 možnosti:

1) Můžete přidat načítání spojení, např. Jak funguje režim FetchMode v Spring Data JPA

2) Můžete přidat OpenEntityManagerInViewFilter pro správce jiných než primárních entit a přidat jej do svého kontextu.

Vezměte prosím na vědomí, že to znamená výzvu, pro každou instanci Bar and Foo se vaše aplikace vrátí zpět do databáze, aby načetla OneToMany. Toto je část, která nefunguje pro Bar, ale je pro Foo. To implikuje problém se škálovatelností (některými nazývaný problém N + 1), protože pro každý foo a bar spustíte další dotaz, který bude pomalý pro netriviální množství Foos and Bars.

3) Alternativou je zapálení vaší sbírky na Bar and Foo (viz tento https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ), ale toto je třeba pečlivě analyzovat, pokud vás škálovatelnost vůbec zajímá.

Doporučil bych možnost #1.



  1. PDO:Nelze najít ovladač php/mysql

  2. Chyba Ruby/PgSQL při spuštění Rails:nelze načíst takový soubor -- pg_ext (LoadError)

  3. Databázový model pro systém zasílání zpráv

  4. Pohodlný způsob, jak zabalit dlouhé příkazy SQL do javascriptu