2017-03-17 29 views
0

我想執行嵌套連接,我的學生用戶將包含用戶analogus的列表,SQL查詢:
如何執行嵌套在Spring數據JPA連接抓取

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
- 指的是用戶ID在朋友關係與用戶

什麼高度重視和我制定的「????」去實現它?

我使用Spring數據JPA

回答

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完美地解釋瞭如何處理這種情況。
希望它可以幫助別人。