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