jpa 使用WHERE子句在一个查询中获取@ElementCollection

ycggw6v2  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(150)

以下是主表:

@Entity
public class Group {

    @Id
    private Integer id;

    @ElementCollection(fetch = EAGER)
    @CollectionTable(name = "group_members",
            joinColumns = @JoinColumn(name = "group_id"))
    @Column(name = "email")
    private Set<String> members = new HashSet<>();

在我的例子中,表是ElementCollection:

group_members {
int group_id,
varchar email
}

当我使用连接获取进行查询时,我得到的Group的所有成员都在Set中。
但是,当我试图按其中一个成员过滤它时,我得到的组只有一个成员,这是我搜索的。
下面是一个查询:

@Query(value = "select group from Group group left outer join fetch group.members members where members = :email")
List<Group> findByMember(@Param("email") String email);

主要的目标是,它应该只有一个查询,没有一个N+1的问题。提前感谢!

js81xvg6

js81xvg61#

我认为,正确的问题应该是:

select distinct group from Group group 
 left join fetch group.members members 
 where :email member of group.members

相关问题