Что ж, реализация отношения @ManyToMany
имеет два подхода. Во-первых, создать отдельную таблицу только с соответствующими идентификаторами каждого объекта. И это может быть легко, но не охватывает все случаи. Например, в вашем случае вы реализуете @ManyToMany
для пользователя и подписчиков. Вам также может понадобиться дата для этого, чтобы показать, в какую дату они создали эти отношения. И это тот случай, когда все немного усложняется (не сильно), но в результате получается кусок кода красоты. В любом случае давайте go для обоих подходов:
`
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
name = "profile_follower",
joinColumns = @JoinColumn(name = "profile_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name = "following_id", referencedColumnName="id")
private Set<Profile> profiles;
@ManyToMany(mappedBy = "profiles")
private Set<Profile> following= new HashSet<>();
`
Другой подход заключается в создании отдельного класса для отношения. `
@Entity
public class ProfilesFollowedByUser{
@EmbeddedId
UserFollower id;//this is a separate class
@ManyToOne
@MapsId("id")
@JoinColumn(name="profile_id", referencedColumnName="id")
private Profile profile;
@ManyToOne
@MapsId("id")
@JoinColumn(name="following_id", referencedColumnName="id")
private Profile profile;
private Date createdAt;}
` А вот встраиваемый класс:
`
@Embeddable
public class UserFollower implements Serializable{
private static final long serialVersionUID = 819015237657421374L;
@Column(name="profile_id")
private Long profileId;
@Column(name="following_id")
private Long followingId;
}
` Второй, вероятно, немного сложнее, но в подавляющем большинстве Scenar ios, по крайней мере, в реальных приложениях, когда вам приходится иметь дело с отношениями, созданными, по крайней мере, всегда необходима дата. Надеюсь, что это поможет с вашей проблемой.