sql >> データベース >  >> RDS >> Mysql

2つのデータベースで動作するようにSpringブートを構成するにはどうすればよいですか?

    * ToManyコレクションは、HibernateおよびJPAではデフォルトでレイジーです。エラーは、エンティティマネージャー(休止状態でのセッションとも呼ばれます)が閉じられたときに、JacksonがOneToManyをシリアル化しようとしているためです。したがって、怠惰なコレクションを取得することはできません。

    デフォルトでJPAを使用したSpringBootは、OpenEntityManagerInViewFilterを提供します プライマリEM用。これにより、読み取り専用のDBアクセスが可能になりますが、デフォルトでは、プライマリEMでのみ機能します。

    3つのオプションがあります:

    1)結合フェッチを追加できます。例: FetchModeはどのように機能しますかSpringDataJPAで

    2)非プライマリエンティティマネージャーのOpenEntityManagerInViewFilterを追加して、コンテキストに追加できます。

    これは課題を意味することに注意してください。BarとFooのインスタンスごとに、アプリはデータベースに戻ってOneToManyを取得します。これはBarでは機能しない部分ですが、Fooでは機能します。これは、各fooとbarについて、スケーラビリティの問題(一部ではN + 1問題と呼ばれる)を意味します。追加のクエリを実行すると、重要な量のFoosとBarに対して速度が低下します。

    3)別の方法は、Bar and Fooでコレクションを熱心に作成することです(これを参照 https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch- )ただし、スケーラビリティがまったく問題になる場合は、これを注意深く分析する必要があります。

    オプション#1をお勧めします。



    1. SSHTunnelForwarderを使用してSSH経由でMySQLデータベースに接続する

    2. サイトマップを生成するためのPHPを使用した複数のSQLテーブル

    3. データベースの専門家にとって機械学習が意味すること

    4. 結合を回避するためにSQLクエリを改善する別の方法は?