Не в состоянии получить связь со многими ко многим ассоциациям, используя JPA-данные Spring, - PullRequest
1 голос
/ 08 октября 2019

Я разрабатывал приложение, используя Spring. Я использую базу данных HSQL и использую пружинные данные JPA для ORM. У меня есть Пользователь и сущность Кино, которые связаны со многими отношениями. В базе данных я создал пользователя, фильм и таблицу UserMovieRelation.

Таблицы базы данных

    create table users (
        user_id varchar(20) not null,
        user_Name varchar(255),
        description varchar(255),
        PRIMARY KEY (user_id)
     );

   create table movies (
       movie_Id varchar(20) not null,
       movie_name varchar(255),
       description varchar(255),
       movie_Type varchar(255),
       language varchar(255),
       PRIMARY KEY (movie_Id)
    );

    CREATE TABLE UserMovieRelation(
       user_id varchar(20) NOT NULL,
       movie_Id varchar(20) NOT NULL,
       FOREIGN KEY (user_id) REFERENCES users(user_id), 
       FOREIGN KEY (movie_Id) REFERENCES movies(movie_Id),
       PRIMARY KEY (user_id, movie_Id)
    );

Пользовательский объект

@Entity
@Table(name = "users")
public class User implements Serializable {
----------
@ManyToMany
@JoinTable(name = "UserMovieRelation", 
joinColumns = { @JoinColumn(name = "user_id") }, 
inverseJoinColumns = { @JoinColumn(name = "movie_Id") })
private Set<Movie> movies;
------
}

Объект фильма

@Entity
        @Table(name="movies")
        public class Movie implements Serializable {
          --------
          @ManyToMany(mappedBy = "movies")
          private Set<User> users;
          --------
        }

У меня есть два репозитория: UserRepository и MovieRepository соответственно.

В моем классе обслуживания я возвращаю всех пользователей с помощью метода findAll из пружинных данных JPA.

public List<User> getAllUser() {
         return userRepository.findAll();
    }

Но яне удалось получить сведения о фильме, связанные с пользователем, в таблице UserMovieRelation. Хотя в таблице есть все данные.

    USER_ID MOVIE_ID 
    ------- -------- 
     1       1       
     1       2  

Вывод будет выглядеть как

    [
        {
           "userId": "1",
           "userName": "default",
           "userDesc": "default desc",
           "movies": []
        }
    ]

Как видите, детали фильма пустые. Что я делаю не так, как получить детали фильма в выводе?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Я думаю, что лучшее решение - изменить аннотацию с

@ManyToMany(mappedBy = "movies")

на

@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER )

. В этом активном извлечении будут также запрашиваться все связанные продукты и заполняться пустой список фильмов.

0 голосов
/ 08 октября 2019

@ManyToMany(cascade = { CascadeType.ALL }) в классе User

...