【问题标题】:How to perform nested join fetch in Spring Data JPA如何在 Spring Data JPA 中执行嵌套连接获取
【发布时间】:2017-08-08 18:02:00
【问题描述】:

我想执行嵌套连接,其中我的类 User 将包含类似于 SQL 查询的用户列表:

SELECT user1.id, user2.id FROM ( users user1 LEFT JOIN friends friend ON user1.id=friend.who ) LEFT JOIN users user2 ON friend.with=user2.id GROUP BY user1.id, user2.id

我的用户实体类:

@Entity
@Table(name = "users")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;
    @Column(name = "login")
    private String login;
    @Column(name = "name")
    private String name;
    @Column(name = "lastname")
    private String surname;
    @Column(name = "password")
    private String password;
    @ManyToMany
    ????
    private List<User> users;
}

用户之间的关系——FriendRelation实体类:

@Entity
@Table(name="friends")
public class FriendRelation implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;
    @Column(name = "who")
    private Integer who;
    @Column(name = "with")
    private Integer with;
    @OneToMany
    @JoinColumn(name="with", referencedColumnName = "id")
    private List<User> users;
}

- 指用户ID
with - 指与用户
有朋友关系的用户ID
我用什么代替了“???”实现它?

我正在使用 Spring Data JPA

【问题讨论】:

    标签: java spring jpa spring-boot spring-data


    【解决方案1】:

    解决方案是添加注释@JoinTable
    我们可以使用这个注解通过映射表来连接两个表,在这种情况下,它是反向连接。

    @JoinTable(name = "friends", joinColumns = @JoinColumn(name = "who"), inverseJoinColumns = @JoinColumn(name = "with"))
    

    用户类别:

    @Entity
    @Table(name = "users")
    public class User implements Serializable {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Column(name = "id")
        private Integer id;
        @Column(name = "login")
        private String login;
        @Column(name = "name")
        private String name;
        @Column(name = "lastname")
        private String surname;
        @Column(name = "password")
        private String password;
        @ManyToMany
        @JoinTable(name = "friends", joinColumns = @JoinColumn(name = "who"), inverseJoinColumns = @JoinColumn(name = "with"))
        private List<User> friends;
    }
    

    Here 完美解释了如何处理这种情况。
    希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 1970-01-01
      • 2019-12-25
      • 2021-11-30
      • 2020-01-10
      • 2021-11-19
      • 2013-03-07
      • 2015-06-03
      • 1970-01-01
      相关资源
      最近更新 更多