delete 删除
public void deleteAirConditionInfo(DeviceAirConditionInfo delete) { DeviceAirConditionInfo aircondition = em.find( DeviceAirConditionInfo.class, delete.getId()); if (aircondition == null) { getStatusMessages().addFromResourceBundle(Severity.WARN, "数据不存在或已被删除"); return; } if (!checkDeleteWithPrompt("DeviceAirConditionInfo", delete.getId())) { return; } // for (AnalogInputInfo info : aircondition.getAnalogairportOutPut()) { // info.getAnalogairportOutPut().remove(aircondition); // em.persist(info); // } // if (aircondition.getAnalogairportOutPut().size() > 0) { // getStatusMessages().addFromResourceBundle(Severity.WARN, // "该空调记录已关联温湿度联动,不能删除!"); // return; // } // em.remove(aircondition); // em.flush(); stipulationUtilAction.delStipulation(aircondition.getId(), "DeviceAirConditionInfo"); loadserialAirConditionInfo(currSerialPortInfo); operateLogUtilAction.addSystemOperateInfo(10162L, "[" + currDeviceInfo.getIpAddress() + "]" + "删除空调记录:" + aircondition.getConditionname() + "操作成功!", currDeviceInfo.getControlersn(), currDeviceInfo.getControllername()); // getStatusMessages().addFromResourceBundle(Severity.INFO, "删除空调记录成功!"); }
自己做的映射关系表,删除时同时查询映射表,删除或取消有外键关联的其他表里的数据
老的删除方式,把所多对一的关联数据判断一遍,存在数据的提示不能删除。
(注:多对多关系不需要处理,hibernate删除对象的时候会自动处理多对多的关系,会删除中间表里的记录)
把数据删除后,还需要在展示的列表中也删除这个对象,其实没有必要,下面有做重新获取列表的操作
重新获取列表
这个 delete from DeviceControlLog 时,airCondition字段有空值的情况,但是并不影响这句sql的执行
// List<Long> mainid = new ArrayList<>(); // mainid.add(20L); // // String sqldel = " delete from DeviceControlLog a where a.airCondition.id in :mainid "; // // Query querydel = em.createQuery(sqldel); // querydel.setParameter("mainid", mainid); // // int count = querydel.executeUpdate(); // // getStatusMessages().addFromResourceBundle(Severity.INFO, // "删除 " + count + " 记录!");