У меня есть таблица пользователей и таблица 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, это не соответствует моей цели.
Может ли кто-нибудь помочь мне, где я ошибаюсь?