java - 如何在 Spring Data JPA 中执行嵌套连接获取

标签 java spring jpa spring-boot spring-data

我想执行嵌套连接,其中我的 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;
}

who - 指用户 ID
with - 指与用户who有 friend 关系的用户ID

我用什么来代替“???”来实现它?

我正在使用 Spring Data JPA

最佳答案

解决方案是添加注释@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完美地解释了如何处理这种情况。
希望它对某人有帮助。

关于java - 如何在 Spring Data JPA 中执行嵌套连接获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42853120/

相关文章:

java - Spring/JUnit - 在任何测试之前运行一些东西

java - 使一个 bean 成为默认的 spring bean

java - JPA1 - ID 是父类(super class)的一部分,由于 @Entity 注释类中缺少 @Id,导致错误

java - jpa,使用非法命名查询的风险?

java - 未定义(海龟)类型

java - 配置弹出窗口的宽度、换行和字体

java - 如何使用 Joda-Time 获取给定月份内的天数?

java - 是否有在普通 Equinox 框架中运行具有 JSP 支持的 Jetty 9.4 或具有 JSP 支持的 Pax Web 的示例?

spring - grails.gorm.transactions.Transactional不回滚

java - 使用 hibernate sessionFactory 或 JPA entityManager?