EntityExistsException Проблема с двунаправленным отображением "многие-к-одному", "один-ко-многим" с дополнительными свойствами в Spring JPA - PullRequest
0 голосов
/ 05 августа 2020

У меня есть таблица пользователей и таблица Mov ie и Fav_Mov ie, которая в основном предназначена для присоединения к пользователю, Mov ie и имеет несколько дополнительных полей.

    @Entity
    @Table(name = "User")
    @Getter
    @Setter
    @EqualsAndHashCode
    @ToString
    public class User implements Serializable {
      @Column(name = "id")
      private String id;
      // rest
      @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
      private List<FavMovie> favMovie = new ArrayList<>();
   }
    
   @Entity
   @Table(name = "Movies")
   @Getter
   @Setter
   @EqualsAndHashCode
   @ToString
   public class Movie implements Serializable {
      @Column(name = "id")
      private String id;
      // rest
     @OneToMany(mappedBy = "movie", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     private List<FavMovie> favMovie = new ArrayList<>();
   }
   
   public class FavMovie implements Serializable {
    @Id
    @ManyToOne(fetch=FetchType.LAZY, optional = false)
    @JoinColumn(name = "id")
    @NotFound(action = NotFoundAction.IGNORE)
    private User user;


    @Id
    @ManyToOne(fetch=FetchType.LAZY, optional = false)
    @JoinColumn(name = "id")
    @NotFound(action = NotFoundAction.IGNORE)
    private Movie movie;

}

@Service
public class UserServiceImpl implements UserService {
 public User updateUser(UpdateUserRequest updateUserRequest) {
       User user  = userRepository.findByIdAndActive(updateUserRequest.getId(), true);
        User newUser = null;
        if(isNull(user)){
            throw new UserException(Messages.USER_NOT_FOUND);
        }
        String[] ignoreProps = ModelUtils.getNullPropertyNames(updateUserRequest);
        FavMovie favMovie = null;
        BeanUtils.copyProperties(updateUserRequest, user, ignoreProps);
        if(!isNull(updateUserRequest.getMovieIds()) && !updateUserRequest.getMovieIds().isEmpty()) {
            List<Movie> movie = movieService.getMoviesByIds(updateUserRequest.getMovieIds());

            List<FavMovie> favMovie = new ArrayList<>();
            for (Movie movie : movies) {
                favMovie = new FavMovie(user, movie);
                favMovie.add(favMovie);
                user.addFavMovie(movie);
            }
        }
            return userRepository.save(user);
    }
}

Я получаю ошибка: EntityExistsException

«сообщение»: «Другой объект с таким же значением идентификатора уже был связан с сеансом: [com.xxx.user.db.FavMovie # com.xxx.user.db. FavMovie@17ad]; вложенное исключение - javax.persistence.EntityExistsException: другой объект с таким же значением идентификатора уже был связан с сеансом:

попытался удалить & изменение FetchType, Cascade, необязательно et c, но безуспешно. Я не хочу использовать @JoinTable, это не соответствует моей цели.

Может ли кто-нибудь помочь мне, где я ошибаюсь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...