首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试合并实体,以防删除尝试失败并抛出异常"foreign key constraint“

尝试合并实体,以防删除尝试失败并抛出异常"foreign key constraint“
EN

Stack Overflow用户
提问于 2015-04-21 20:53:53
回答 1查看 403关注 0票数 0

目标:尝试从数据库中删除行,并将其作为外键链接到另一个表,合并状态为非活动的实体

在finally块中,我试图合并实体,但它抛出了异常代码:

代码语言:javascript
运行
复制
public void deleteServiceData(Service service) {
        boolean deleteServiceException = false;
        Service entity = null;
        em = emf.createEntityManager();
        try {
            if (service != null) {
                 entity = getServiceMasterId(service);
                 em.remove(entity);
                 em.flush();
                 logger.info("Deleted");
            }
        }catch(PersistenceException e) {
            logger.error("There is an PersistenceException");
            deleteServiceException = true;
            em.clear();
        }catch(Exception e) {
            logger.error("There is an Exception");
            e.printStackTrace();

        }finally{
            logger.info("finally block execution"+deleteServiceException);
            if(deleteServiceException == true){
                Service ser = entity; 
                ser.setStatus(StatusEnum.I);
                logger.info("Service ready to delete");
                em = emf.createEntityManager();
                em.merge(ser);
                em.flush();
            }
        }

例外:

代码语言:javascript
运行
复制
 Cannot delete or update a parent row: a foreign key constraint fails (`devbackup`.`section`, CONSTRAINT `FKA03B0AC53771DF5C` FOREIGN KEY (`SERVICE_ID`) REFERENCES `service` (`ID`))
18:11:28,817 INFO  [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (default task-59) HHH000010: On release of batch it still contained JDBC statements
18:11:28,817 ERROR [com.icare.scheduling.ejb.ServiceEJBImpl] (default task-59) There is an PersistenceException
18:11:28,817 INFO  [com.icare.scheduling.ejb.ServiceEJBImpl] (default task-59) finally block executiontrue
18:11:28,817 INFO  [com.icare.scheduling.ejb.ServiceEJBImpl] (default task-59) Service ready to delete
18:11:28,818 INFO  [stdout] (default task-59) Hibernate: select service0_.ID as ID1_59_0_ _ from SERVICE service0_

18:11:28,818 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-59) SQL Error: 0, SQLState: null
18:11:28,818 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-59) javax.resource.ResourceException: IJ000460: Error checking for a transaction
18:11:28,818 INFO  [org.hibernate.event.internal.DefaultLoadEventListener] (default task-59) HHH000327: Error performing load command : org.hibernate.exception.GenericJDBCException: Could not open connection
18:11:28,821 ERROR [com.icare.rest.scheduling.ServiceImpl] (default task-59) There is an Exception
18:11:28,821 ERROR [stderr] (default task-59) javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection

18:11:28,822 ERROR [stderr] (default task-59)   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)

18:11:28,822 ERROR [stderr] (default task-59)   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)

18:11:28,822 ERROR [stderr] (default task-59)   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)

18:11:28,822 ERROR [stderr] (default task-59)   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1206)
EN

回答 1

Stack Overflow用户

发布于 2015-04-21 21:11:43

你的服务实体有一个对其他实体的引用,没有表,我不确定那是什么样子,部分。假设您还想删除该引用,则需要执行以下操作之一:

  • 删除其他表中的引用首先
  • 删除外键约束

设置FOREIGN_KEY_CHECKS=0;

  • setup级联删除,如下所示:

ALTER TABLE Service

添加约束service_ibfk_1

外键(service_id)引用section (service_id)

ON DELETE CASCADE;

根据您想要做什么,这种关系可能实际上与您想要的(删除其他实体和级联删除服务)相反。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29772793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档