Что здесь происходит, так это то, что у вас есть Cascade All на объекте Stream. Поэтому он пытается удалить поток. Этот набор необходим для объекта College и отображается в CollegeStream. Я бы попробовал это
Сначала измените College и удалите Set<Stream>
из него. Затем создайте CollegeStream, который расширяет College и сопоставляет их вместе:
public CollegeStream extends College {
private College college;
private Set<Stream> streams;
// Getters/Setters
}
Затем сопоставьте CollegeStream с College / Stream с помощью Hibernate, добавив каскад к отображению College
<class name="CollegeStream" table="COLLEGE_STREAM">
<many-to-one name="college" class="com.paramatrix.bean.College" cascade="all">
<column name="college_id />
</many-to-one>
<set name="streams" table="STREAM">
<key column="stream_id" />
<many-to-many class="com.paramatrix.bean.Stream" />
</set>
</class>
Таким образом, при загрузке объекта CollegeStream он будет содержать данные из колледжа, сопоставленные с набором потоков. При удалении CollegeStream он должен затем удалить связанный College, а также CollegeStream без удаления Stream.