目标:尝试从数据库中删除行,并将其作为外键链接到另一个表,合并状态为非活动的实体
在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)发布于 2015-04-21 21:11:43
你的服务实体有一个对其他实体的引用,没有表,我不确定那是什么样子,部分。假设您还想删除该引用,则需要执行以下操作之一:
设置FOREIGN_KEY_CHECKS=0;
ALTER TABLE Service
添加约束service_ibfk_1
外键(service_id)引用section (service_id)
ON DELETE CASCADE;
根据您想要做什么,这种关系可能实际上与您想要的(删除其他实体和级联删除服务)相反。
https://stackoverflow.com/questions/29772793
复制相似问题