如何在联接表未定义自己的实体时编写 QueryDSL 方法


Tables:
------
MEMBER
----------
MEMBER_ID(PK)
MEMBER_NAME
MEMBER_MANAGER
------------
MEMBER_ID(FK - MEMBER.MEMBER_ID)
MANAGER_ID(FK - MEMBER.MEMBER_ID)

我只需要创建成员类。我没有创建成员管理器类,因为我在成员类中将一到manay关系定义为:...

@OneToMany
@JoinTable(name = "member_manager", joinColumns = @JoinColumn(name = "member_id") , inverseJoinColumns = @JoinColumn(name = "manager_id") )
private Set<Member> memberManagers;

查询DSL方法:

public Member getDetails(Long memberId)
{
    QMember member = QMember.member;
    QMember memberManager = QMember.member;
    JPQLQuery query = new JPAQuery(entityManager);
    Member memberDetail = query.from(member)
                           .innerJoin(member.memberManagers, memberManager)
                           .where(memberManager.id.eq(memberId)).uniqueResult(member);
    return memberDetail ;
}

但是,上述内容并不能给我带来有效的结果。

下面是普通的SQL联接,它给了我一个有效的结果。我希望这个翻译成QueryDSL。我如何实现这一点?谢谢。

select m.id, m.name from member m inner join member_manager mm on m.id = mm.manager_id where m.member_id=?
QMember member = QMember.member;
QMember memberManager = QMember.member;

您正在重用相同的运行时对象。

QMember member = QMember.member;
QMember memberManager = new QMember("member_manager");

您必须创建一个新变量来引用连接的关系。

最新更新