【问题标题】:Fetching ElementCollecion from Hibernate based on a condition根据条件从 Hibernate 中获取 ElementCollecion
【发布时间】:2020-06-23 07:20:44
【问题描述】:

我有一个名为 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,但由于我有很多用户,执行查询需要很多时间(以分钟为单位)。

【问题讨论】:

  • 你使用什么数据库?恐怕,要使这个查询高效并适合您的需要,您应该为此编写一个 sql 本机查询。
  • @SternK 感谢您的回复。我正在使用 Postgres。我已经通过删除 fetch 关键字并在获取用户后初始化集合来解决上述问题。

标签: java hibernate spring-data-jpa hql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2020-09-24
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2020-11-30
    相关资源
    最近更新 更多