我有以下星座:
public final class ApplicationUser {
private final @Id
@Wither
long applicationUserId;
@NotNull
@Size(min = 4, max = 20)
private final
String login;
@NotNull
@Email
private final
String eMail;
@Wither
private Set<Privilege> privileges;
}
现在我想通过login
查询一个ApplicationUser
,这是由一个简单的 sqlQuery
完成的。
我现在的问题:
是否有任何与 jpa 的连接获取相关的 spring-data-jdbc 相关的东西,以便我可以在一个声明的查询中获取关联的Set<Privilege> privileges
?
还是我必须像这样触发另一个查询:
- 通过登录名查询
ApplicationUser
- 按外键
applicationuser
查询Privilege
谢谢
您的答案描述了执行此操作的默认方法。如果要避免额外的选择,可以使用包含联接的语句并使用ResultSetExtractor
来构造实体。
优点:运行时效率更高。
缺点:为你做更多的工作。
我应该等待我的问题,因为我自己刚刚找到了答案。
所以我的答案是:
只需在您的存储库函数中键入此 sql 查询:
@Query("select a.applicationuserid, a.email, a.login, p from applicationuser a left outer join privilege p on a.applicationuserid = p.applicationuser where lower(a.login) = lower(:login)")
在相应的日志中,已经触发了第二个sql查询来获取权限。