【发布时间】:2021-11-26 09:20:45
【问题描述】:
我想在一个查询中查询 date_to 等于 null 的具有分配的角色。 我需要返回所有角色,即使是那些没有分配任务的角色。
角色实体中的关系已设置:
@OneToMany(mappedBy = "role")
private List<Assignment> assignment;
Assignment Entity 与 Permission 有关系:
@ManyToMany
@JoinTable(
name = "assignment_version_permission",
joinColumns = @JoinColumn(name = "assignment_version_id"),
inverseJoinColumns = @JoinColumn(name = "permission_id"))
private Set<Permission> permissions;
@Column(name = "date_to")
private LocalDateTime dateTo;
并来自权限实体:
@ManyToMany
@JoinTable(
name = "assignment_version_permission",
joinColumns = @JoinColumn(name = "permission_id"),
inverseJoinColumns = @JoinColumn(name = "assignment_version_id"))
@ToString.Exclude
private List<Assignment> assignments;
我尝试仅在 date_to 等于 null 的情况下查询所有角色及其分配。
@Query("from Role r left join Assignment av on r.dbid = av.role.dbid and av.dateTo is null left join av.permissions p where r.name in :names")
List<Role> readByRoleNameInOnlyActiveAssignments (List<String> names);
上述查询有效,但在 role.getAssignemts() 之后 如果没有分配,我只想接收 date_to 为 null 或 null 的分配。
现在 role.getAssignemts() 对所有与角色相关的分配进行额外查询。当一个角色没有活动的分配时,我不想收到任何一个。我怎样才能实现它?
我尝试使用 EntityGraph,但没有选项可以在 assignemns 上添加条件(仅返回 assignment date_to 为 null 的这些)
@EntityGraph(attributePaths = {"assignments", "assignments.permissions"})
List<Role> readByNameIn(List<String> names);
【问题讨论】:
标签: sql spring-boot hibernate jpa