0
SQLQuery query = session.createSQLQuery("select {o.id} from order o " +
        "LEFT JOIN bookings b ON b.id = o.bookingId " +
);
List pusList = query.addEntity(Order.class)
        .list();

そして私が持っている順番にクラス:

@OneToOne(cascade = CascadeType.ALL, mappedBy = "order", fetch = FetchType.LAZY)
private Trip trip;

しかし、実行中に次のように表示されます:fist、main sql。そして、次のような多数のクエリ: Hibernate: /* load Trip */ select......

Trips の取得を拒否するにはどうすればよいですか?

更新: この場合、トリップは役に立ちません。そして、それをフェッチしない方が良いです。

4

2 に答える 2

0

あなたは怠惰にフェッチしています。これは、メインがロードされ、必要に応じて各トリップがロードされることを意味します。

一般に、何ができるかを確認するには、Hibernateパフォーマンスドキュメントを参照してください。

これは1対1のマッピングであるため、フェッチをfetch = FetchType.JOINに変更します。これにより、メインと同時にトリップが読み込まれ、データベースにトリップが追加されなくなります。

于 2009-10-15T10:06:27.507 に答える
0

これを設定した方法は、注文オブジェクトを構築するために、データベースが旅行テーブルを調べる必要があるということです(定義を正しく読み取れば、「旅行」テーブルに列「注文」があります順序を参照します)。これが本当に 1 対 1 の関係であると確信していますか? ドメインについてはわかりませんが、通常、外部キーは 1 対多の関係にマップされ、属性は旅行または注文のコレクションになります。

テーブル/関係と対応するクラス、特に関係を含むはずのメンバーに関する詳細情報を含めてください。これにより、ローディングが発生する理由とそれを回避するために何ができるかを説明するための情報がさらに得られると思います。

于 2009-10-15T16:04:25.337 に答える