繁体   English   中英

如何使用带有注释的 hibernate 中的另一个表将表与自身连接起来?

[英]How to join table with itself using another table in hibernate with annotations?

我有两个表 - 用户和朋友。 任何用户都可以有任意数量的朋友(另一个用户)。 这些关系存储在“朋友”表中,因此这只是服务表。

关系图

我应该如何在我的实体类中对此进行编码? 我应该使用@ManyToMany 吗? 我的假设是下一个:

用户.java:

@Entity
@Table(name = "users")
@NoArgsConstructor
public class User implements Serializable {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "id")
    private Long id;

    @Basic
    @Column(name = "name", nullable = false, length = 45)
    private String name;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
            name = "friends",
            joinColumns = { @JoinColumn(name = "id") },
            inverseJoinColumns = { @JoinColumn(name = "sender") }
    )
    private Set<User> friendsInviters = new HashSet<>();

    @ManyToMany(mappedBy = "users")
    private Set<User> friendsReceiver = new HashSet<>();

}

朋友.java:

@Entity
@Table(name = "friends")
@NoArgsConstructor
public class Friend implements Serializable {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "id")
    private Long id;

    @Basic
    @Column(name = "sender")
    private Long sender;

    @Basic
    @Column(name = "receiver")
    private Long receiver;

}

PS - 我刚开始学习 Hibernate :)

@Entity
@Table(name = "users")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

    @Column(name = "name", nullable = false, length = 45)
    private String name;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(name="users_friends",
            joinColumns = { @JoinColumn(name = "user_id") },
            inverseJoinColumns = { @JoinColumn(name = "friend_id") }
    )
    private Set<User> friendsInviters = new HashSet<>();

    @ManyToMany(mappedBy = "friendsInviters")
    private Set<User> friendsReceiver = new HashSet<>();

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<User> getFriendsInviters() {
        return friendsInviters;
    }

    public void setFriendsInviters(Set<User> friendsInviters) {
        this.friendsInviters = friendsInviters;
    }

    public Set<User> getFriendsReceiver() {
        return friendsReceiver;
    }

    public void setFriendsReceiver(Set<User> friendsReceiver) {
        this.friendsReceiver = friendsReceiver;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM