【发布时间】:2014-06-30 21:42:46
【问题描述】:
我遇到的情况是 Card 实体有一个 Person 的外键。
public class Card implements java.io.Serializable {
private String cardid;
private Person person;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USERID")
public Person getPerson() {
return this.person;
}
}
此人的默认获取类型是 LAZY。我可以在查询中将获取类型指定为 EAGER:
QCard qCard = QCard.card;
JPQLQuery query = getQuery().from(qCard);
query.list(qCard);
感谢您的帮助。
【问题讨论】:
-
你可以在你的对象被分离之前调用
getPerson()方法来加载Person对象,你是否有特定的理由来改变获取类型? -
之所以要更改fetch类型,是为了优化查询。我有一个需要加载多个外键对象的情况。它似乎运行缓慢。
-
所以您在 QueryDSL 中寻找来自 JPAQL 的
FETCH关键字。这是你要找的吗? groups.google.com/forum/#!msg/querydsl/Geexg_eN2yA/iREXf-DM0nwJ -
这似乎是我要找的。我会试一试并写回结果。所以我可以为每个外键对象添加这样的东西来急切加载:“query.innerJoin(qCard.person).fetch();”
-
我添加了“query.innerJoin(qCard.cmsPerson).fetchAll();”但它仍然懒惰地获取 person 对象。