目标:尝试从数据库中删除一行,并将其链接到另一个表作为外键,合并实体状态为非活动
在finally块中我尝试合并实体但它抛出异常 代码:
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();
}
}
例外:
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)
答案 0 :(得分:0)
您的服务实体有一个其他实体的引用,没有表格,我不知道那是什么,看起来像部分。假设您还想删除该引用,则需要执行以下操作之一:
删除外键约束
SET FOREIGN_KEY_CHECKS = 0;
设置级联删除,如下所示:
ALTER TABLE Service
添加约束service_ibfk_1
FOREIGN KEY(service_id
)参考section
(service_id
)
ON DELETE CASCADE;
这种关系实际上可能与您想要的相反(删除其他实体并级联删除服务),具体取决于您要执行的操作。