如何加入获取关联的子关系
How to join fetch associated child relation
我有以下星座:
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
,这是通过一个简单的 sql Query
.
完成的
我现在的问题:
是否有任何 spring-data-jdbc 与 jpa 的连接获取相关的东西,以便我可以在一个声明的查询中获取关联的 Set<Privilege> privileges
?
或者我是否必须像这样触发另一个查询:
- 通过其登录查询
ApplicationUser
- 通过外键查询
Privilege
applicationuser
谢谢
我应该等我的问题,因为我自己刚刚找到了答案。
所以这是我的答案:
只需将此 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 查询以获取权限。
描述了执行此操作的默认方法。如果你想避免额外的 select 你可以使用包含连接的语句并使用 ResultSetExtractor
来构造你的实体。
Pro:运行时效率更高。
Con:你需要做更多的工作。
我有以下星座:
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
,这是通过一个简单的 sql Query
.
完成的
我现在的问题:
是否有任何 spring-data-jdbc 与 jpa 的连接获取相关的东西,以便我可以在一个声明的查询中获取关联的 Set<Privilege> privileges
?
或者我是否必须像这样触发另一个查询:
- 通过其登录查询
ApplicationUser
- 通过外键查询
Privilege
applicationuser
谢谢
我应该等我的问题,因为我自己刚刚找到了答案。
所以这是我的答案:
只需将此 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 查询以获取权限。
ResultSetExtractor
来构造你的实体。
Pro:运行时效率更高。
Con:你需要做更多的工作。