如何在 join table 没有定义自己的实体时编写 QueryDSL 方法
How to write a QueryDSL method when join table does not have its own Entity defined
Tables:
------
MEMBER
----------
MEMBER_ID(PK)
MEMBER_NAME
MEMBER_MANAGER
------------
MEMBER_ID(FK - MEMBER.MEMBER_ID)
MANAGER_ID(FK - MEMBER.MEMBER_ID)
我只需要创建会员 class。我没有创建 MemberManager class,因为我在 Member class 中定义了一对多的关系:
...
@OneToMany
@JoinTable(name = "member_manager", joinColumns = @JoinColumn(name = "member_id") , inverseJoinColumns = @JoinColumn(name = "manager_id") )
private Set<Member> memberManagers;
QueryDSL 方法:
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");
您必须创建一个新变量来引用连接关系。
Tables:
------
MEMBER
----------
MEMBER_ID(PK)
MEMBER_NAME
MEMBER_MANAGER
------------
MEMBER_ID(FK - MEMBER.MEMBER_ID)
MANAGER_ID(FK - MEMBER.MEMBER_ID)
我只需要创建会员 class。我没有创建 MemberManager class,因为我在 Member class 中定义了一对多的关系: ...
@OneToMany
@JoinTable(name = "member_manager", joinColumns = @JoinColumn(name = "member_id") , inverseJoinColumns = @JoinColumn(name = "manager_id") )
private Set<Member> memberManagers;
QueryDSL 方法:
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");
您必须创建一个新变量来引用连接关系。