のためのクエリを作成し、私は私がそれらの間の結合を持つシンプルな2つのJPAエンティティがあります。春JPAは、効率性を参加 - 各反復
プライマリエンティティ国:
public class Country implements Serializable {
@Id
@Column(name = "MCC")
private String mcc;
......
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "mcc", referencedColumnName = "mcc")
private List<CountryInfo> countryInfo;
共同事業体CountryInfoを:
public class CountryInfo implements Serializable {
@Id
@Column(name = "id")
private Long id;
@Column(name = "mcc")
private String mcc;
@Column(name = "continent")
private String continent;
クエリをダンプするように構成をオンにしたときxecuted、私はこれがかなり以来、登録しようと1つのコールを作成するよりも明らかに遅いです
..見つかった各国のために、別のコールが指定されたMCCとCountryInfoエンティティで行われることに気付きました、それはありますN + 1回のクエリを実行します(N =カウントは国)。
は、私はすでにこのチュートリアルhttps://zeroturnaround.com/rebellabs/how-to-use-jpa-correctly-to-avoid-complaints-of-a-slow-application/を見て、それに応じて変化しますが、それはまだN + 1つのクエリを呼び出してきました。..
はこれを克服する方法はありますか?その後、@RepositoryRestResource(exported = false)
public interface CountryRepository extends JpaRepository<E212MCC, Long>,
JpaSpecificationExecutor<E212MCC> {
}
そして、いくつかの仕様を呼び出します:
List<E212MCC> countries = this.countryRepository.findAll(specifications);
どのようにあなたの国のインスタンスを選択している、とあなたは参加フェッチを使用して試してみましたcountryInfo関係のクエリでは? – Chris
@Chrisデータがどのようにロードされているかを表示するために私の質問が更新されました。いいえFetch Joinを使って試したことがありません。 – cgval