Как вставить два идентификатора в таблицу, которая связывает двух пользователей? - PullRequest
1 голос
/ 08 января 2020

Я хочу создать механизм следования, и у меня есть следующий класс User, который также является классом друга:

@Entity
@Table(name = "user")
public class User {

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

    private String firstName;

    private String lastName;

    private String username;

    private String password;

    @Column(unique = true)
    private String email;

    @Column(unique = true)
    private String phoneNumber;

    private int age;

    private Role role;

    @OneToMany(mappedBy = "shareId")
    private List<Share> shares;

    @OneToMany(mappedBy = "trackId")
    private List<Track> tracks;

    //number of days of cooldown
    private int cooldown;

    private long numberOfReports;

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

    @ManyToMany(mappedBy="friends")
    private Set<User> befriended = new HashSet<User>();

, и этот код автоматически создает таблицу с именем friends, которая содержит ссылки между пользователями user_id и friend_id Теперь, когда я хочу создать ссылку между пользователями, как сказать Hibernate сделать это? UserService:

        User followerUser = userRepository.findByUsername(followerUsername);
        User followedUser = userRepository.findByUsername(followedUsername);
        return userRepository.SOMETHING(followerUser.getId(), followedUser.getId);
    }

Каким должен быть метод из userRepository?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы должны быть в состоянии сделать это, просто обновляя пользователей и используя save, например:

followerUser.getFriends().add(followedUser);
// This is not necessary for database, but useful on object level
followedUser.getBefriended().add(followerUser);

userRepository.save(followerUser);
0 голосов
/ 10 января 2020

стек трассировки ошибки:

2020-01-10 22:42:36.742 ERROR 10376 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->org.hibernate.collection.internal.PersistentSet[0]->com.travel.heroes.model.User["friends"]->com.travel.heroes.model.User["friends"])] with root cause

java.lang.StackOverflowError: null
    at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[na:na]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...