2

私はこのようなエンティティを持っています:

public class Configuration {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    @Element(name = "user_id", data = true, required = false)
    private Users users;
}

私が望むのは、LazyLoading が実行されるクエリと実行されないクエリを定義することです。

しかし、クエリ:

@NamedQuery(name = "getNondeletedConfiguration", query = "SELECT c FROM Configuration c  "
                     + "LEFT JOIN c.users users WHERE c.deleted = false"),

ユーザーをオブジェクトにロードしません。

ユーザー オブジェクトを強制的にロードする方法は、コード内のどこかで属性にアクセスすることです。ただし、これは機能していません。この動作は望ましくありません。JPQL ステートメントのみに基づいて遅延読み込みを制御したいと考えています。Javaコードのどこかでgetメソッドを介したアクセスを検出するため、openJPAに魔法のようにオブジェクトをロードさせたくありません。

これはよくある問題だと思いますが、何かを誤解しているだけです。ただし、問題に関するドキュメントが見つかりません。

4

1 に答える 1

8

fetch関連付けをロードするには、キーワードを追加する必要があります。

select c from Configuration c left join fetch c.users where c.deleted = false

Users1 人のユーザーを表すエンティティの名前は、非常に不適切な選択であり、非常に紛らわしいことに注意してください。フィールド名についても同じですusers。最終的な を削除する必要sがあります。これにより、構成に多くのユーザーがいるとすべての読者が考えるようになります。

于 2012-09-29T10:43:04.390 に答える