【发布时间】:2011-06-13 09:53:24
【问题描述】:
我知道 hibernate 有惰性作为默认的获取策略,但是有些事情我不清楚,所以我希望你能解释一下。我想要做的是获得一个标记为开始瓷砖的瓷砖。
查询:
@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 join 解决这个问题,但我的问题是为什么 hibernate 会同时获取两个实体?即使我用 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();
...
在我解决这个问题之前,我想了解它为什么会发生。 提前致谢 米
【问题讨论】: