Не слишком уверен, если у вас есть ошибка в исходной базе данных или в экспорте. Мы используем тот же подход, но потом реорганизуем таблицы. (Я постараюсь найти сценарий, который мы используем, если вам это нужно, и вернусь к этому завтра)
В любом случае: вам не нужен класс сущностей для вашего отношения m: n, если нет никаких дополнительных полей, кроме внешних ключей:
В категории:
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "article_categories",
joinColumns = { @JoinColumn(name = "article_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "category_id", nullable = false, updatable = false) })
private Set<Article> articles;
В статье:
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "article_categories",
joinColumns = { @JoinColumn(name = "category_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "article_id", nullable = false, updatable = false) })
private Set<Category> categories;
Это создаст таблицу m: n.
Когда мы запускаем экспортер hibernate, мы на самом деле получаем класс отображения и класс ключей, которые вам понадобятся, если вам нужны дополнительные столбцы в таблице m: n. Но, как я уже сказал, завтра мне придется откопать фрагмент.