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