Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring数据JPA中执行嵌套联接获取_Java_Spring_Jpa_Spring Boot_Spring Data - Fatal编程技术网

Java 如何在Spring数据JPA中执行嵌套联接获取

Java 如何在Spring数据JPA中执行嵌套联接获取,java,spring,jpa,spring-boot,spring-data,Java,Spring,Jpa,Spring Boot,Spring Data,我想执行嵌套联接,其中我的类用户将包含类似于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

我想执行嵌套联接,其中我的类用户将包含类似于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;
}
@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;
}
@实体
@表(name=“users”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私有整数id;
@列(name=“login”)
私有字符串登录;
@列(name=“name”)
私有字符串名称;
@列(name=“lastname”)
私家姓;
@列(name=“password”)
私有字符串密码;
@许多
????
私人名单用户;
}
用户之间的关系-FriendRelation实体类:

@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;
}
@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;
}
@实体
@表(name=“friends”)
公共类FriendRelation实现了可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私有整数id;
@列(name=“who”)
私人整数谁;
@列(name=“with”)
私有整数;
@独身癖
@JoinColumn(name=“with”,referencedColumnName=“id”)
私人名单用户;
}
-指用户的id
with-指与用户有朋友关系的用户的id,该用户是

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


我使用的是Spring数据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;
}
@实体
@表(name=“users”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私有整数id;
@列(name=“login”)
私有字符串登录;
@列(name=“name”)
私有字符串名称;
@列(name=“lastname”)
私家姓;
@列(name=“password”)
私有字符串密码;
@许多
@JoinTable(name=“friends”,joinColumns=@JoinColumn(name=“who”),inverseJoinColumns=@JoinColumn(name=“with”))
私人名单朋友;
}
完美地解释了如何处理这种情况。
希望它能帮助别人