首页 > 解决方案 > 根据条件从 Hibernate 中获取 ElementCollecion

问题描述

我有一个名为的类User,它有一个元素集合groups,如下所示:

public class User {

    @ElementCollection
    @CollectionTable(name = "user_groups", joinColumns = @JoinColumn(name = "id"))
    private Set<String> groups;

    //Other fields
}

现在我需要根据组名获取用户列表。查询是这样的:

@Query("select distinct user from User user " +
        "left join fetch user.groups groups " +
        "where :groupName IN groups")
List<User> findUsersByGroupName(@Param("groupName") String groupName);

这工作正常,但在获取的User对象中,我只得到一组(我正在传递)。我需要User获取的对象中的所有组。我怎样才能有效地做到这一点?
我试过使用elementsmember of但由于我有很多用户,执行查询需要很多时间(以分钟为单位)。

标签: javahibernatespring-data-jpahql

解决方案


上述查询的问题是fetch关键字急切地从数据库中获取数据,因此只有一组存在。我删除了fetch关键字并在获取后初始化了组User。这给出了一个用户的所有组。


推荐阅读