Spring Hibernate критерии производительности проблема времени? - PullRequest
0 голосов
/ 06 января 2019

В моем проекте мы вставляем 10000 записей в таблицу базы данных. Мы перебираем каждую запись из базы данных и сравниваем ее со вставленными записями. Если есть какое-либо обновление, мы обновляем записи, которые мы добавляем в базу данных. Проблема в том, почему метод list () требует времени для извлечения из таблицы. записи базы данных кэшируются в сеансе? Мы вставляем записи с помощью метода сессии merge (). И мы используем пружину в спящем режиме.

  1. Если я вызываю метод очистки и сброса сеанса, производительность улучшается, и метод list () критериев очень быстро выбирает записи из базы данных.

  2. Почему нам нужно вызывать метод очистки и сброса сеанса? я очищаю вставленные записи, которые доступны в сеансе?

  3. Пожалуйста, помогите мне, как улучшить производительность этого приложения

Item.java

public class Item{

      public void saveCOXItemSalesLocation(CemCOXItemList pCemCOXItemList) {

        int i = 1;
        COXItemSalesLocationMap allCOXItemSalesLocations = new COXItemSalesLocationMap();

        for (CemCOXItem vCemCOXItem : pCemCOXItemList) {

          ClassUnitKey classUnitKey = new ClassUnitKey(vCemCOXItem.getClassUnitKey().getClassType(),
              vCemCOXItem.getClassUnitKey().getClassUnitType(),
              vCemCOXItem.getClassUnitKey().getClassUnitCode());

          COXItemKey COXItemKey =
              new COXItemKey(vCemCOXItem.getItemNo(), vCemCOXItem.getItemType());
          COXItemKeyMap vCOXItemKeyMap = new COXItemKeyMap();
          vCOXItemKeyMap.put(COXItemKey);

          Set<String> salesLocationNmaeIds = new HashSet<String>();



          // fetch existing SalesLocationNames from CEM
          System.out.println("sales location name get start" + new DateTime());
          COXItemSalesLocationNameMap existingCOXItemSalesLocationNameMap =
              getCOXItemSalesLocationNames(classUnitKey, vCemCOXItem);
          System.out.println("sales location name get end" + new DateTime());

          // fetch existing SalesLocations from CEM
          System.out.println("sales location get start" + new DateTime());
          List<COXItemSalesLocation> existingCOXItemSalesLocationList =
              getNonDeletedCOXItemSalesLocations(classUnitKey, vCOXItemKeyMap);
          System.out.println("sales location get end" + new DateTime());

          List<COXItemSalesLocation> COXItemSalesLocationList =
              new ArrayList<COXItemSalesLocation>();

          COXItemSalesLocationNameMap COXItemSalesLocationNameMap =
              new COXItemSalesLocationNameMap();

          for (CemCOXItemSalesLocation vCemCOXItemSalesLocation : vCemCOXItem
              .getCOXItemSalesLocationList()) {

            // Map CemCOXItemSalesLocation to COXItemSalesLocation
            COXItemSalesLocation COXItemSalesLocation = (COXItemSalesLocation) cemMapper
                .map(vCemCOXItemSalesLocation, new COXItemKeyComposite(classUnitKey,
                    new ItemKey(vCemCOXItem.getItemNo(), vCemCOXItem.getItemType())));
            if (!COXItemSalesLocation.getCOXItemSalesLocationAreas().isEmpty()) {
              for (COXItemSalesLocationArea COXItemSalesLocationArea : COXItemSalesLocation
                  .getCOXItemSalesLocationAreas()) {
                if (COXItemSalesLocationArea.getCOXItemSalesLocationNames() != null) {
                  COXItemSalesLocationNameMap.putAll(transformSalesLocationName(
                      COXItemSalesLocationArea.getCOXItemSalesLocationNames(),
                      existingCOXItemSalesLocationNameMap));
                }
              }
            }
            COXItemSalesLocationList.add(COXItemSalesLocation);

            // add sales location names from Saleslocation
            if (CollectionUtils.isNotEmpty(COXItemSalesLocation.getCOXItemSalesLocationNames())) {
              COXItemSalesLocationNameMap.putAll(
                  transformSalesLocationName(COXItemSalesLocation.getCOXItemSalesLocationNames(),
                      existingCOXItemSalesLocationNameMap));
            }
          }

          System.out.println("sales location name save start" + new DateTime());
          saveCOXItemSalesLocationName(COXItemSalesLocationNameMap);
          System.out.println("sales location name save end" + new DateTime());
          for (COXItemSalesLocationName COXItemSalesLocationName : COXItemSalesLocationNameMap) {
            salesLocationNmaeIds.add(COXItemSalesLocationName.getId());
          }
          COXItemSalesLocationMap existingSaleslocationMapFromList =
              new COXItemSalesLocationMap();
          existingSaleslocationMapFromList.putAll(existingCOXItemSalesLocationList);

          // SaveSalesLocations
          COXItemSalesLocationMap transformedSalesLocationMap =
              mSaveCOXItemSalesLocationTransformer.toCOXItemSalesLocation(
                  COXItemSalesLocationList, existingSaleslocationMapFromList, classUnitKey,
                  COXItemKey);

          System.out.println("sales location  save start" + new DateTime());
          saveCOXItemSalesLocation(transformedSalesLocationMap);
          System.out.println("sales location  save end" + new DateTime());

      }
}

COxSalesLocationDao.java

class COxSalesLocationDao{

     @SuppressWarnings("unchecked")
      public COXItemSalesLocationNameMap getCOXItemSalesLocationNames(ClassUnitKey pClassUnitKey,
          CemCOXItem pCemCOXItem) {
        if (pClassUnitKey == null) {
          return new COXItemSalesLocationNameMap();
        }
        Criteria vCriteria = getSession().createCriteria(COXItemSalesLocationNameView.class);
        ClassUnitKeyFilter vClassUnitKeyFilter = new ClassUnitKeyFilter(pClassUnitKey);
        vCriteria.add(this.getClassUnitKeyFilterCriterion(vClassUnitKeyFilter,
            "COXItemSalesLocationNameKey.ClassType", "COXItemSalesLocationNameKey.ClassUnitType",
            "COXItemSalesLocationNameKey.ClassUnitCode"));
        vCriteria.add(getExcludeDeletedEntities("DeleteDateTime"));

        if (pCemCOXItem != null) {
          Disjunction vDisjunction = Restrictions.disjunction();
          CemCOXItemSalesLocationList vCemCOXItemSalesLocationList =
              pCemCOXItem.getCOXItemSalesLocationList();
          for (CemCOXItemSalesLocation vCemCOXItemSalesLocation : vCemCOXItemSalesLocationList) {

            for (CemCOXItemSalesLocationArea vCemCOXItemSalesLocationArea : vCemCOXItemSalesLocation
                .getSalesLocationAreaList()) {
              for (CemCOXItemSalesLocationName vCemCOXItemSalesLocationName : vCemCOXItemSalesLocationArea
                  .getSalesLocationAreaNameList()) {

                Conjunction vConjuction = Restrictions.conjunction();
                vConjuction.add(Restrictions.eq("COXItemSalesLocationNameKey.LanguageCode",
                    vCemCOXItemSalesLocationName.getLanguageCode()));
                vConjuction.add(Restrictions.eq("COXItemSalesLocationNameKey.CountryCode",
                    vCemCOXItemSalesLocationName.getCountryCode()));
                vConjuction.add(Restrictions.eq("COXItemSalesLocationNameKey.Id",
                    vCemCOXItemSalesLocationName.getId()));
                vDisjunction.add(vConjuction);

              }

            }
          }
          vCriteria.add(vDisjunction);
        }
        // IKEA00853945
        return new COXItemSalesLocationNameMap(castCOXItemSalesLoctionName(vCriteria.list()));

      }


     public void saveCOXItemSalesLocation(COXItemSalesLocationMap pCOXItemSalesLocationMap) {
            if (ListUtils.isNotNullOrEmpty(pCOXItemSalesLocationMap)) {
              for (COXItemSalesLocation vCOXItemSalesLocation : pCOXItemSalesLocationMap
                  .values()) {
                getSession().merge(vCOXItemSalesLocation);
              }
              getSession().flush();
              getSession().clear();
            }
          }

          public void saveCOXItemSalesLocationName(
              COXItemSalesLocationNameMap pCOXItemSalesLocationNameMap) {
            if (ListUtils.isNotNullOrEmpty(pCOXItemSalesLocationNameMap)) {
              saveCOXItemSalesLocationName(pCOXItemSalesLocationNameMap.values());
            }
          }

          private void saveCOXItemSalesLocationName(
              Collection<COXItemSalesLocationName> pCOXItemSalesLocationNames) {
            if (ListUtils.isNotNullOrEmpty(pCOXItemSalesLocationNames)) {
              for (COXItemSalesLocationName vCOXItemSalesLocationName : pCOXItemSalesLocationNames) {
                getSession().merge(vCOXItemSalesLocationName);
              }
              getSession().flush();
              getSession().clear();
            }
          }

          @SuppressWarnings("unchecked")
          public List<COXItemSalesLocation> getNonDeletedCOXItemSalesLocations(
              ClassUnitKey pClassUnitKey, COXItemKeyMap pCOXItemKeyMap) {

            if (pClassUnitKey == null) {
              return new ArrayList<COXItemSalesLocation>();
            }
            Criteria vCriteria = createCriteria();
            vCriteria.createAlias("COXItemSalesLocationAreas", "COXItemSalesLocationAreas")
                .add(Restrictions.isNull("COXItemSalesLocationAreas.DeleteDateTime"));

            vCriteria.add(this.getClassUnitKeyFilterCriterion(new ClassUnitKeyFilter(pClassUnitKey),
                "COXItemSalesLocationKey.ClassType", "COXItemSalesLocationKey.ClassUnitType",
                "COXItemSalesLocationKey.ClassUnitCode"));


            Disjunction vDisjunction = Restrictions.disjunction();

            for (COXItemKey vCOXItemKey : pCOXItemKeyMap.values()) {
              Conjunction vConjunction = Restrictions.conjunction();
              vConjunction
                  .add(Restrictions.eq("COXItemSalesLocationKey.ItemNo", vCOXItemKey.getItemNo()));
              vConjunction.add(
                  Restrictions.eq("COXItemSalesLocationKey.ItemType", vCOXItemKey.getItemType()));
              vDisjunction.add(vConjunction);
            }
            vCriteria.add(getExcludeDeletedEntities("DeleteDateTime"));
            vCriteria.add(vDisjunction);

            return vCriteria.list();
          }


 }
...