私が把握できないhibernate問合せのパフォーマンスに問題があります。以下のコードスニペットでは、少なくとも1つのマッピングとフィルタリングされたマッピングを持つ選択エンティティが必要です。私はこれをフィルタリングされたマッピングだけをロードするためにFETCH JOINを使用しています。 しかし、その場合、私はクエリでパフォーマンスの問題があります。 Hibernateは、警告ログ言う:JOIN FETCHパフォーマンス問合せでの問合せ
org.hibernate.hql.ast.QueryTranslatorImpl - firstResultコレクションで指定された/ maxResultsフェッチ。メモリは でお申し込みください!
私がFETCH JOINを省略して残すのは、JOINクエリのみが高速です。しかし、結果として、すべてのマッピングがエンティティにロードされていますが、これは私には受け入れられない状態です。クエリのパフォーマンスを向上させる方法はありますか?マッピングテーブルには多くの行があります。
HQLクエリー:
select distinct e from Entity
join fetch e.mappings as mapping
where e.deleted = 0 and e.mappings is not empty
and e = mapping.e and mapping.approval in (:approvals)
エンティティ:
@Entity
@Table(name="entity")
class Entity {
...
@OneToMany(mappedBy="entity", cascade=CascadeType.REMOVE, fetch=FetchType.LAZY)
@OrderBy("created")
private List<Mapping> mappings = new ArrayList<Mapping>();
...
}
@Entity
@Table(name="mapping")
class Mapping {
public static enum MappingApproval {
WAITING, // mapping is waiting for approval
APPROVED, // mapping was approved
DECLINED; // mapping was declined
}
...
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="entity_id", nullable=false)
private Entity entity;
@Enumerated(EnumType.STRING)
@Column(name="approval", length=20)
private MappingApproval approval;
...
}
おかげJVMのもののためにメモリを増加させた後
Hibernateが発行したSQLクエリを表示できますか? – axtavt
@axtavt私はHibenateからSQLクエリを追加しました。御時間ありがとうございます。 –
'JOIN'または' FETCH JOIN'のクエリですか?別の場所はどこですか? – axtavt