Ограничение внешнего ключа не работает во многих отношениях Hibernate - PullRequest
0 голосов
/ 07 мая 2020

Сейчас я пытаюсь реализовать в Hibernate отношения «многие ко многим». Я последовал: https://www.baeldung.com/hibernate-many-to-many, однако я получаю исключение, в котором говорится:

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`playlist_comparer`.`playlist_tracks`, CONSTRAINT `fk_pt_track_id` FOREIGN KEY (`track_id`) REFERENCES `tracks` (`id`))

Вот ликбаза для моей таблицы соединений:

        - createTable:
        tableName: playlist_tracks
        columns:
          - column:
              constraints:
                primaryKey: true
                primaryKeyName: pk_playlist_track_id
              name: id
              type: bigint
              autoIncrement: true
          - column:
              name: playlist_id
              type: VARCHAR(255)
              constraints:
                foreignKeyName: fk_pt_playlist_id
                references: playlists(id)
          - column:
              name: track_id
              type: VARCHAR(255)
              constraints:
                foreignKeyName: fk_pt_track_id
                references: tracks(id)

и отображение на моих объектах Hibernate:

Список воспроизведения. java:

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "playlist_tracks", //
        joinColumns = {@JoinColumn(name = "track_id", nullable = false)}, //
        inverseJoinColumns = {@JoinColumn(name = "playlist_id", nullable = false)})
private Set<Track> tracks = new HashSet<>();

Track. java:

@ManyToMany(mappedBy = "tracks")
private Set<Playlist> playlists = new HashSet<>();

Сначала я сохраняю треки в БД без привязки к каким-либо спискам воспроизведения в одном методе @Transactional, оставьте границу транзакции, а затем введите новый метод @Transactional, в котором я добавляю дорожки в объект Playlist, а затем пытаюсь сохранить это, и в этот момент я получаю исключение вверху.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 08 мая 2020

Оказывается, я просто неправильно указал столбцы соединения в аннотации таблицы соединения.

...