Простое удаление из базы данных

0

Я пытаюсь удалить данные из базы данных, используя общий подход. он работает для добавления, обновления, но при удалении я получаю это:

java.sql.SQLIntegrityConstraintViolationException: не удается удалить или обновить родительскую строку: ограничение внешнего ключа завершается с ошибкой (mydb. testCases, CONSTRAINT fk03 FOREIGN KEY (type) ССЫЛКИ testType (idtestType) ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ)

База данных

 //delete the object to the database
public static void deleteObject(Object object) {
    SessionFactory factory = HibernateUtil.GetSessionFactory();
    Session session = factory.openSession();
    Transaction tx = null;
    try{
        tx = session.beginTransaction();
        session.delete(object);
        tx.commit();
    }catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace();
    }finally {
        session.close();
    }
}

Моя попытка удаления

  List<TestFlow> flow = getFlow(flowName);

   //delete the current one
    for(TestFlow tf : flow) {
        Database.deleteObject(tf);
    }

HBM

<hibernate-mapping>
<class name="com.atp.Model.TestCases.TestFlow" table="testFlow">
    <meta attribute="class-description">
        This class contains the testCases flow details.
    </meta>
    <id name="id" type="int" column="idtestFlow">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <many-to-one name="testCase" class="com.atp.Model.TestCases.TestCase" column="testCase" fetch="select" cascade="all" lazy="false"/>
    <property name="rowNumber" column="rowNumber" type="int"/>
    <property name="testCaseStatus" column="testCaseStatus" type="int"/>
    <property name="params" column="params" type="string" />
    <property name="creationDate" column="creationDate" type="string"/>
    <property name="createdBy" column="createdBy" type="string"/>
    <property name="targetType" column="targetType" type="string"/>
    <property name="targetName" column="targetName" type="string"/>
    <property name="output" column="output" type="string"/>
    <property name="completionDate" column="completionDate" type="string"/>
    <property name="isCompleted" column="isCompleted" type="int"/>
</class>

  • 1
    Скорее всего, это не вопрос Java, а вопрос MySQL, и, скорее всего, проблема в том, что вы пытаетесь удалить запись, на которую все еще ссылаются записи в других таблицах (это в основном то, что говорится в сообщении об ошибке, в простой английский).
Теги:
database
hibernate

2 ответа

1

Кажется, что ваш внешний ключ в таблице "Назначения" имеет значение "Вкл.": "Ограничить". Измените Constraint assignments_user_id_foreign на On delete: Cascade, и вы должны иметь возможность удалять пользователей, сохраняя внешний ключ.

Вы можете сделать это двумя способами:

а. Сначала удалите связанные записи из таблицы встреч с помощью отдельной инструкции удаления.

б. Добавьте опцию delete cascade к внешнему ключу assignments_user_id_foreign. Эта опция автоматически удалит любые связанные записи из таблицы встреч для пользователя, который будет удален при удалении записи пользователя.

Попробуйте это как свою потребность

Query q = session.createQuery("from Stock where stockCode = :stockCode ");
q.setParameter("stockCode", "4715");
Stock stock = (Stock)q.list().get(0);
session.delete(stock);

или же

  @OneToMany(cascade=CascadeType.REMOVE) 
    List<TestFlow> flow = getFlow(flowName);

   //delete the current one
    for(TestFlow tf : flow) {
        Database.deleteObject(tf);
    }
0

Вы не можете удалить родительскую запись и разрешить детям записи как сироты по умолчанию.

Добавьте каскад удаления в ограничение внешнего ключа, чтобы предотвратить появление сирот.

ALTER TABLE mydb.testCases DROP FOREIGN KEY fk03;
ALTER TABLE mydb.testCases ADD CONSTRAINT fk03 FOREIGN KEY (type) REFERENCES 
testType(idtestType) ON DELETE CASCADE ON UPDATE NO ACTION;

См. Пример Hibernate - Cascade (сохранение, обновление, удаление и удаление-сирота) для получения дополнительной информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню