У меня есть стол колледжа и таблица потоков. Колледж имеет отношения один-ко-многим с таблицей потоков. Теперь, если я удаляю колледж, он выдает ошибку - PullRequest
0 голосов
/ 08 января 2019

В Hibernate У меня есть 2 таблицы, а именно College и Stream, следовательно, 2 класса POJO. Теперь у Колледжа есть связь «многие ко многим» с Stream, что достигается созданием Set<Stream> streams = new HashSet<Stream>() в Колледже класса POJO. Все необходимые сопоставления выполняются в файле College.hbm.xml.

Теперь, когда я удаляю College из таблицы College, выдается ошибка: update or delete on table "stream" violates foreign key constraint "fk1rk5ykysbvn2uddkm345fi00y" on table "college_stream".

Я использовал cascade="all" в файле отображения гибернации, но та же ошибка. А что я могу сделать??

  <id name="id" column="id"/>      
  <property name = "address" column="address"/>
  <property name = "country" column="country"/>
  <property name = "grants" column="grants"/>
  <property name = "name" column="name"/>
  <set name="streams" table="COLLEGE_STREAM" cascade="all">
        <key column="college_id" />
        <many-to-many column="stream_Id"  class="com.paramatrix.bean.Stream" />
  </set>

1 Ответ

0 голосов
/ 08 января 2019

Что здесь происходит, так это то, что у вас есть 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...