JPA命名查询连接

时间:2016-03-09 21:29:31

标签: java jpa join named-query

我遇到了JPA的问题,我需要返回一个用户列表,但我总是得到用户ID来自

这个工作正常并返回您关注的用户:

@NamedQuery(name = "User.findByFollowing",
                        query = "select User from User user join user.followers f where f.id=:id"),

此查询始终返回id参数的用户(param = 1返回user1而不是您所跟随的所有用户)

  @NamedQuery(name = "User.findFollower",
            query = "select User, f from User user join user.followers f where user.id=:id")

表格如下所示,两列都是用户表的id。

如你所见:

  • user4有2个粉丝
  • user3有1个粉丝
  • 用户2关注2位用户
  • 用户1关注1个用户

The table

这是用户表

User table

跟随者表由JPA生成,带有一个arraylist

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private List<User> followers = new ArrayList();

现在你已经掌握了一些背景信息。

作为用户2,我可以看到我关注的是user3和用户4.但如果我是用户3,我看不到user2跟随我(这总是以某种方式返回user3)

如果您需要更多信息,请随时提出

1 个答案:

答案 0 :(得分:1)

你为什么不“从用户u中选择你的u.id =:id”并在你的java代码中通过u.getFollowers()访问关注者?如果您的实体具有关系,则不明确需要连接。