Spring Hibernate не удаляет ряды из таблицы соединенийJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Hibernate не удаляет ряды из таблицы соединений

Сообщение Anonymous »

У меня есть две основные таблицы под названием «Фильм и актер». В фильме могут быть несколько актеров и наоборот. Поэтому я сделал таблицу соединения под названием Movieactor. Проблема в том, что я не могу найти способ удалить старые ряды из таблицы соединения Moviactor, когда ссылки из двух таблиц обновляются. Я буду визуализировать это, так что это легче понять. Let's say I have a movie that has two actors.



id
movie_id
actor_id

< /thead>


1 < /td>
1 < /td>
1 < /td>
< /tr>

2 < /td>
1 1 1 1 1 1 1 1 1 1 1 1 1 1 /> 2 < /td>
< /tr>
< /tbody>
< /table> < /div>
Вот как таблица соединения будет их подключать.
Но, допустим, я хочу изменить список актеров. Я хочу актера 3 и 4 вместо актера 1 и 2. < /P>



id < /th>
movie_id < /th>
actor_id < /th>
< /thead>


1 < /td>
1 < /td>
1 < /td>
< /tr>

2 < /td>
1 1 1 1 1 1 1 1 1 1 1 1 1 1 /> 2 < /td>
< /tr>

3 < /td>
1 < /td>
3 < /td>
< /tr>

4 < /td>
< /tr>

4 < /td>
< /tr /> 4 < /td>
< /tr>
< /tbody>
< /table> < /div>
Это проблема, с которой я сталкиваюсь. Hibernate не удалит старые ряды. Первые два ряда должны быть удалены из БД, так как я обновляю фильм с разными актерами. < /P>
public class Movie {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "movie_id", columnDefinition = "bigint", unique = true, nullable = false)
private Long id;

@Column(name = "name", columnDefinition="varchar(255)", nullable=true)
private String name;

@OneToMany(mappedBy="movie", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JsonManagedReference
private List MovieActors;
}

< /code>
public class MovieActor implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "movie_actor_id", columnDefinition = "bigint", unique = true, nullable = false)
private Long id;

@ManyToOne()
@JoinColumn(name="movie_id")
@JsonBackReference
private Movie movie;

@ManyToOne()
@JoinColumn(name="actor_id")
@JsonBackReference
private Actor actor;
}
< /code>
Here is my Service method for update.
public String updateMovie(String movieData) throws JsonProcessingException {

try {
JSONObject movieObj = new JSONObject(movieData);

// Check if movie exist
Optional movieOpt = movieRepository
.findById(movieObj.getLong("id"));
if (movieOpt.isEmpty())
return "Movie does not exist";

Movie movie = movieOpt.get();
List movieActors = new ArrayList();
// Check if actors exist
JSONArray actorIdArray = movieObj.getJSONArray("actor_ids");
for (int i = 0; i < actorIdArray.length(); i++) {
Optional actorOpt = actorRepository
.findById(actorIdArray.getLong(i));
if (actorOpt.isEmpty())
return "actor doesn't exist";

// Save MovieActor
MovieActor movieActor = new MovieActor();
movieActor.setMovie(movie);
movieActor.setActor(actorOpt.get());
movieActors.add(movieActor);
}

movie.setMovieActors(movieActors);

Movie updatedMovie = movieRepository.saveAndFlush(movie);

return CustomResponse(HttpStatus.ACCEPTED.value(),updatedMovie);

} catch (Exception e) {
log.error("Exception", e);
return CustomResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
}
}

< /code>
I have tried using
movieActorRepository.deleteAll(movie.getMovieActors());
< /code>
before saving the new ones. And it still doesn't work. The old rows are still there in the database.

Подробнее здесь: https://stackoverflow.com/questions/794 ... join-table

Вернуться в «JAVA»