0
非常に簡単なマッピングです。はmysqlデータベースにあり、1対多コレクションの遅延ロードは無効です
データベースは多対MySQL5.0の
ユーザー< - オン>ブログ
マッピングです:
<class name="com.aaa.model.User" table="users">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="username" column="USERNAME" type="string"/>
<property name="age" column="AGE" type="int"/>
<set name="blogs" inverse="true" fetch="join">
<key column="userid"/>
<one-to-many class="com.aaa.model.Blog"/>
</set>
</class>
<class name="com.aaa.model.Blog" table="blog">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="name" column="NAME" type="string" length="50"/>
<property name="hits" column="HITS" type="integer" length="11"/>
</class>
私は、<set>
プロパティに "参加=フェッチ" を使用私はそのようなUserインスタンスを取得するためにsession.get()メソッドを使用します。
User user = (User)session.get(User.class, new Long(1));
for (Blog blog : user.getBlogs()) {
System.out.println(blog.getName());
}
が出力SQLは、私が休止状態3.2と3.6でそれを試して、まだ「N + 1」
select
user0_.ID as ID0_0_,
user0_.USERNAME as USERNAME0_0_,
user0_.AGE as AGE0_0_
from
users user0_
where
user0_.ID=?
select
blogs0_.userid as userid0_1_,
blogs0_.ID as ID1_,
blogs0_.ID as ID1_0_,
blogs0_.NAME as NAME1_0_,
blogs0_.HITS as HITS1_0_
from
blog blogs0_
where
blogs0_.userid=?
で、結果は同じですが、これはバグか何かでしょうか?
感謝の男は、あなたが言ったことは、非常に右でありますlazy = fasle "と" batch-size = 2 "に変更した場合、または" lazy = fasle "と" fetch = join "の両方が必要になる場合があります。 "lazy = false"と "fetch = subselect" まだ動作していません(N + 1タイプを使用)。 – gamein
Err、はい。結合が必要な場合は、結合を使用します。それがそれのためのものです。 –