Querydsl在查询中设置提取模式

Mar*_*rko 16 java hibernate querydsl

我有一种情况,卡实体有一个人的外键.

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;
}
}
Run Code Online (Sandbox Code Playgroud)

该人的默认提取类型是LAZY.我可以在查询中为EAGER指定获取类型:

QCard qCard = QCard.card;
JPQLQuery query = getQuery().from(qCard);
query.list(qCard);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Tim*_*per 20

你试过了吗

QCard qCard = QCard.card;
List<Card> cards = getQuery().from(qCard)
    .innerJoin(qCard.person).fetch()
    .list(qCard);
Run Code Online (Sandbox Code Playgroud)

对于QueryDSL 4.0.2+

QCard qCard = QCard.card;
List<Card> cards = getQuery().from(qCard)
    .innerJoin(qCard.person).fetchJoin()
    .select(qCard).fetch();
Run Code Online (Sandbox Code Playgroud)

  • 截至[QueryDSL 4.0.2](https://github.com/querydsl/querydsl/issues/1414),界面已更改.要设置上次连接的获取模式,请调用fetchJoin().要最终获得结果,请调用fetch().所以它将是List <Card> cards = getQuery().from(qCard).innerJoin(qCard.person).fetchJoin().fetch(); (5认同)