Spring Hibernate标准性能问题需要花费时间吗?

时间:2019-01-06 08:31:25

标签: spring hibernate spring-mvc hibernate-mapping hibernate-criteria

在我的项目中,我们将10000条记录插入数据库表中。我们正在迭代数据库中的每个记录,并将其与插入的记录进行比较。如果有任何更新,我们将更新记录,否则我们将插入数据库。 问题是为什么条件list()方法需要花费一些时间才能从表中获取数据。数据库记录是否在会话中缓存?我们正在使用会话merge()方法插入记录。而且我们将spring和hibernate一起使用。

  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();
          }


 }

0 个答案:

没有答案