2016-02-25 3 views
1

Я пытаюсь выполнить итерацию по списку записей sdid в java. В отчетах sdid установлена ​​запись до 8 записей с тем же sdid, но необходимо проверить столбец состояния каждого sdid, чтобы узнать, есть ли его PEND_ADD, PEND_DEL AND ACTIVE.Добавить boolean в java-код для проверки состояния состояния таблицы

Итак, для первого условия: если статус PEND_ADD или PEND_DEL. Затем удалите записи.

Если статус ACTIVE, то удалите записи.

Если статус ACTIVE, PEND_ADD и/или PEND_DEL, а затем удалить PEND_ADD и/или PEND_DEL и держать ACTIVE

 private void disconnectClassOfService(List<Integer> sdidList) throws Exception { 

      if (sdidList == null || sdidList.isEmpty()){ 
       return; 
      } 

      logger.info("Start deleting sdid : " + sdidList); 
      for (Integer sdid : sdidList) { 

       List<CosPolicy2Interface> cosPolicy2InterfaceBySdid = getCosPolicy2InterfaceDAO().getCosPolicy2InterfaceBySdid(sdid); 
       if (cosPolicy2InterfaceBySdid != null && !cosPolicy2InterfaceBySdid.isEmpty()){ 
        for (CosPolicy2Interface cosPolicySdid: cosPolicy2InterfaceBySdid){ 
         if (cosPolicySdid.getStatus().equals("PEND_ADD")){ 
          getPersistMgr().delete(cosPolicySdid); 
         } 
         if (cosPolicySdid.getStatus().equals("PEND_DEL")){ 
          getPersistMgr().delete(cosPolicySdid); 
         } 
         if (cosPolicySdid.getStatus().equals("ACTIVE")){ 
          getPersistMgr().delete(cosPolicySdid); 
         } 
        } 
       } 

мой зимуют запрос

  protected static final String queryBySdid = " SELECT * " 
       + " FROM cos_policy2interface " 
       + " WHERE connection_type = 'SDID' AND connection_id = ?"; 

     @Override 
     public List<CosPolicy2Interface> getCosPolicy2InterfaceBySdid(
       long sdid) throws Exception { 
      EntityManager em = getEntityManager(); 
      CosPolicy2Interface CosPolicy2Interface = null; 
      Query query = em.createNativeQuery(queryBySdid, CosPolicy2Interface.class); 
      query.setParameter(1, sdid); 

      @SuppressWarnings("unchecked") 
      List<CosPolicy2Interface> cosPolicy2InterfaceList = query.getResultList(); 
      return cosPolicy2InterfaceList; 
     } 

пример таблицы:

CosPolicy2Interface_id,connection_type, connection_id, status 
29, 'SDID', 13538806, ACTIVE 
30, 'SDID', 13538806, PEND_DEL 
31, 'SDID', 13538806, ACTIVE 
32, 'SDID', 13538806, PEND_ADD 
33, 'SDID', 13538806, PEND_ADD 
34, 'SDID', 13538806, ACTIVE 

My logic will erased all of it since it will iterate one record at a time. Could I use a boolean? some thing like this how can I implemented. 

1) Pen Add -> dont care delete (But set PendingFlag to true) 
2)Pend Del --> dont care delete (Set Pending Flag to true) 
3) Active --> Store them in a list to check later 
    Come out of the for-loop and check if pendingFlag is false and activeCosList is not empty --> delete them 
+0

Это запутанно, в вашем методе 'disconnectClassOfService' вы пытаетесь удалить каждую запись и в последнем случае, если вы проверяете, совпадает ли статус записи со всем статусом, когда запись может иметь только один статус. – Bunti

+0

Да, ваше право, оно никогда не ударит по этому состоянию. Неправильно мне нужно только сохранить 'ACTIVE' .so в этом примере запись' 29', '31',' 34' для connection_id '13538806' thats my sdid. Я хочу сохранить. и удалите «PEND_ADD» и «PEND_DEL». – Gio

+0

Итак, почему вы удаляете объект с статусом 'ACTIVE' в' disconnectClassOfService', если вы не хотите удалять эту запись? – Bunti

ответ

1

Я хотел бы изменить ваш метод disconnectClassOfService.

private void disconnectClassOfService(List<Integer> sdidList) throws Exception { 

    if (sdidList == null || sdidList.isEmpty()) { 
     return; 
    } 

    logger.info("Start deleting sdid : " + sdidList); 
    for (Integer sdid : sdidList) { 

     List<CosPolicy2Interface> cosPolicy2InterfaceBySdid = getCosPolicy2InterfaceDAO().getCosPolicy2InterfaceBySdid(sdid); 
     if (cosPolicy2InterfaceBySdid != null && !cosPolicy2InterfaceBySdid.isEmpty()) { 

      List<CosPolicy2Interface> recordsACTIVE = new ArrayList<>(); 
      List<CosPolicy2Interface> recordsNonACTIVE = new ArrayList<>(); 

      for (CosPolicy2Interface cosPolicySdid : cosPolicy2InterfaceBySdid) { 
       if (cosPolicySdid.getStatus().equals("PEND_ADD")) { 
        recordsNonACTIVE.add(cosPolicySdid); 
       } 
       if (cosPolicySdid.getStatus().equals("PEND_DEL")) { 
        recordsNonACTIVE.add(cosPolicySdid); 
       } 
       if (cosPolicySdid.getStatus().equals("ACTIVE")) { 
        recordsACTIVE.add(cosPolicySdid); 
       } 
      } 
      if ((recordsACTIVE.size() == cosPolicy2InterfaceBySdid.size())) { 
       getPersistMgr().deleteAll(cosPolicy2InterfaceBySdid);// Delete all records 
      } else { 
       // delete non active records 
       getPersistMgr().deleteAll(recordsNonACTIVE); 
      } 
     } 
    } 
} 

Таким образом, вам не нужно удалять записи отдельно.

+0

ни один из записей не удаляется, он переходит к инструкции else. чем я добавил в инструкции else 'getPersistMgr(). delete (cosPolicySdid);' и он удалил все мои записи, включая 'ACTIVE',' PEND_ADD' и 'PEND_DEL' – Gio

+0

@Gio, чтобы увидеть обновленный ответ. Несмотря на то, что я действительно не знаю обо всех сценариях, которые вы хотите охватить, это даст вам правильное направление. Я обновил ответ, основываясь на последнем комментарии вашего первоначального сообщения. – Bunti

Смежные вопросы