Как указано в комментариях, вам нужен объект объединения, но вам не нужно предоставлять его клиентам вашей доменной модели: выполнив что-то подобное ниже, вам нужно будет всего лишь изменить любой клиентский код, который напрямую изменяет коллекции, чтобы вызвать методы addXXX / removeXXX. Ни один клиентский код не знает только о сущности Join. Поэтому изменения в вашем Java-коде должны быть незначительными.
Что касается запросов, вам, очевидно, придется изменить их по мере необходимости.
Серия
@Entity
public class Serie extends AbstractEntity {
@OneToMany(mappedBy = "serie")
private List<SerieDisciplina> serieDisciplinas;
public List<Disciplina> getDisciplinas(){
//disciplinas extracted from serieDisciplinas
return Collections.unmodifiableList(...);
}
public void addDisciplina(Disciplina disciplina){
SerieDisciplina sd = new SerieDisciplina();
sd.stSerie(this);
sd.setDisciplina(disciplina);
serieDesciplinas.add(sd);
}
}
Disciplina
@Entity
public class Disciplina extends AbstractEntity {
@ManyToMany(mappedBy = "disciplina")
private List<SerieDisciplina> serieDisciplinas;
public List<Serie> getSeries(){
//series extracted from serieDisciplinas
return Collections.unmodifiableList(...);
}
public void addSerie(Serie serie){
SerieDisciplina sd = new SerieDisciplina();
sd.stSerie(Serie);
sd.setDisciplina(this);
serieDesciplinas.add(sd);
}
}
Присоединиться к организации
@Entity
public class SerieDisciplina{
@ManyToOne
private Serie serie;
@ManyToOne
private Disciplina disciplina;
//fields for the additional data about the relationship
//getters and setters
}
В документах Hibernate рекомендуется избегать @ManyToMany
, чтобы избежать подобных проблем. См. Обсуждение по адресу: Hibernate Best Practices: Избегание многих-ко-многим и «экзотических» отношений