sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo configurar Spring boot para trabajar con dos bases de datos?

*ToMany Collections es perezoso por defecto en Hibernate y JPA. El error se debe a que Jackson intenta serializar OneToMany cuando el administrador de entidades (también conocido como sesión en hibernación) está cerrado. Por lo tanto, las colecciones perezosas no se pueden recuperar.

Spring Boot con JPA por defecto proporciona un OpenEntityManagerInViewFilter para el EM primario. Esto permite el acceso a la base de datos de solo lectura, pero, de manera predeterminada, solo funciona para el EM principal.

Tienes 3 opciones:

1) Puede agregar una búsqueda de combinación, p. Cómo funciona FetchMode en Spring Data JPA

2) Puede agregar un OpenEntityManagerInViewFilter para el administrador de la entidad no principal y agregarlo a su contexto.

Tenga en cuenta que esto implica un desafío, para cada instancia de Bar and Foo, su aplicación volverá a la base de datos para recuperar OneToMany. Esta es la parte que no funciona para Bar, pero sí para Foo. Esto implica un problema de escalabilidad (llamado el problema N + 1 por algunos) ya que para cada foo y bar, se ejecuta una consulta adicional, que será lenta para cantidades no triviales de Foos y Bars.

3) Una alternativa es hacer que su colección en Bar and Foo esté ansiosa (vea esto https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ) pero esto debe analizarse cuidadosamente si la escalabilidad es una preocupación para usted.

Recomendaría la opción #1.