私はHibernateがデフォルトフェッチ戦略として怠惰を持っていることを知っていますが、私には不明なことがいくつかあります。私がしたいのは、開始タイルとしてマークされたタイルを取得することです。Hibernate Fetchを理解する
問合せ:
@NamedQuery(name = "Tile.findStartTileByGame",
query = "SELECT t FROM Tile t WHERE t.game = :game " +
"and t.startTile = true and t.blockWalkable = false")
タイル:
public class Tile{
@OneToOne(mappedBy="tile")
private GameCharacter character;
@OneToOne(mappedBy="tile")
private GameObject gameObject;
がゲーム:
@OneToMany(mappedBy="game")
private List<Tile> tiles;
私は私のクエリを実行し、決してオブジェクトがまだ私のキャラクターとゲームオブジェクトを結合休止状態使用しています。だから私は3つのクエリがあります。私はフェッチ結合でこれを解決することができることを知っていますが、なぜ私の質問は、休止状態で両方のエントントをまったくフェッチしないのですか? fetch = FetchType.LAZYで注釈を付けても、それは照会されます。
マイDAO:
public static Tile getFreeStartTile(EntityManager em, Game game) {
TypedQuery<Tile> query = em.createNamedQuery("Tile.findStartTileByGame", Tile.class);
query.setParameter("game", game);
List<Tile> result = query.getResultList();
...
私はこの問題を解決する前に、私はそれが起こる理由を理解したいと思います。 ありがとうございます。 m
ああ私は、なぜこの今はるかに理解私のケースは怠惰な読み込みをしませんでした。お疲れ様でした! – mkuff