私はカスタムクエリは、ユーザーがIDJPAは価値多くのクエリ
platformsId=1
typesId=1
2は、約18個のクエリは、私はパラメータの関数で作成 私のクラス
@Entity
public class Head {
@Id
private Integer id;
@OneToMany(mappedBy = "head")
private List<PackageInstances> packageInstance;
@ManyToOne
private Platforms platform;
@ManyToOne
private Types type;
@ManyToOne
private Owners Owner;
@ManyToOne
private Pack package;
}
クエリを行っている入力しないフェッチ
@Override
public Page<Head> advancedSearch(HeadSearch search, Pageable page) {
Specification<Head> specification = (Root<Head> root, CriteriaQuery<?> cq, CriteriaBuilder cb) -> {
Predicate p = cb.conjunction();
if (search.getId() != null) {
p.getExpressions().add(cb.equal(root.get("id"), search.getId()));
}
if (search.getOwnersId() != null) {
Join<Head, Owners> owners = root.join("Owner");
p.getExpressions().add(cb.equal(owners.get("id"), search.getOwnersId()));
}
if (search.getTypesId() != null) {
Join<Head, Types> types = (Join) root.fetch("type");
p.getExpressions().add(cb.equal(types.get("id"), search.getTypesId()));
}
if (search.getPlatformsId() != null) {
Join<Head, Platforms> platform = (Join) root.fetch("platform");
p.getExpressions().add(cb.equal(platform.get("id"), search.getPlatformsId()));
}
if (search.getPackagesId() != null) {
Join<Head, Pack> packages = root.join("package");
p.getExpressions().add(cb.equal(packages.get("id"), search.getPackagesId()));
}
return p;
};
return this.findAll(specification, page);
}
確かにページングはいくつかのクエリを実行しますが、実行されたクエリはすべて必ずしも発生しません。 フェッチは何も変更していないようです。
JoinColumnを追加しようとしましたが、同じ問題が発生しました。
これを最適化する方法はありますか?それほど多くのクエリを回避する方法はありますか?
「フェッチは何も変えていないようです」と言うと、何を試しましたか? @ManyToOneのデフォルトのフェッチ戦略はEAGERなので –
私が行ったクエリをチェックすると、私はフェッチコマンドを使用します –