Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> медленная запись в базу 
:(
    Опции темы
ratzko
Дата 20.5.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет




У меня есть следующий код, который заносить продукты в базу: 

Код

public void productInsert(ProductImportForm importForm, ProductSession pSession, int i) {
        String[] pathes = Utils.split(importForm.getRecords()[i][0], '@', '\\');
        Product newProduct = new Product(getVatCategory(vatCategoryName), pSession);
        try {
               if(importForm.getRecords()[i][1] != null && !importForm.getRecords()[i][1].equals("")) {
                newProduct.setItemCode(importForm.getRecords()[i][1];);
            }
            if(importForm.getRecords()[i][2] != null) {
                newProduct.setName(importForm.getRecords()[i][2]);
            }
        } catch() {
        }
        pSession.save(newProduct);
        try {
            if(importForm.getRecords()[i][92] != null) {
                addOptions(importForm.getRecords()[i][92], newProduct);
            }
            if(importForm.getRecords()[i][100] != null) {
                addQuantityPriceRule(importForm.getRecords()[i][100], newProduct);
            }
            if(importForm.getRootGroup() == null && importForm.getRecords()[i][0] != null){
                for(int x = 0; x < pathes.length; x++){
                    String path = pathes[x];
                    ProductGroup group = pSession.createGroupByPath(path);
                    group.addProduct(newProduct);
                }   
            } 
            }
    
        } catch(Exception e) {
                   throw new RuntimeException(msg, e);
        }
    }


проблема в том что если продуктов о4ень много то на ето уходит слищком много времени!!!

в 4ем сдесь проблема и как ее мозно решить?
PM MAIL   Вверх
LSD
Дата 20.5.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Круто! Какие-то свои собственные классы, один малопонятный метод и надо понять в чем проблема. Настоящая задачка для телепатов smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ratzko
Дата 20.5.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



ок понял! а 4то еще надо показать или все собсвенняе классы показать?
PM MAIL   Вверх
Orange
Дата 20.5.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



Цитата(ratzko @ 20.5.2008,  16:01)
ок понял! а 4то еще надо показать или все собсвенняе классы показать?

Покажи класс в котором ты используешь этот метод.
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
ratzko
Дата 20.5.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



Код

public class WizardImportAction extends Action<ProductImportForm> {
    
    private Map<Integer, ActionResult> redirects = new HashMap<Integer, ActionResult>();
    
    public WizardImportAction() {
        redirects.put(1, new ActionResult("first"));
        redirects.put(2, new ActionResult("second"));
    }
    
    private static final class ProductsSuccessfullyInserted extends ActionResult {
        public ProductsSuccessfullyInserted(String count) {
            super(new Message("label.import_done_prompt", count));
        }
        @Override
        public boolean isError() {
            return false;
        }
    }
    
    @Override
    public ActionResult perform(ProductImportForm importForm, HttpServletRequest request) {
        ProductSession pSession = ManagerFactoryLocator.getManagerFactory().getPersister().getProductSession();
        FormErrors errors = new FormErrors();
        getController().setErrors(request, "productImport", errors);       
        
        int insertedValues = 0;
        
        for (int page = 1; page < importForm.getNextPage(); page++) {
            errors.addAll(importForm.validate(page));
            if (! errors.isEmpty()) {
                return redirects.get(page);
            }
        }
        
        if(importForm.getNextPage() <= ProductImportForm.PAGES) {
            return redirects.get(importForm.getNextPage());
        }
        
        for(int i = 1; i < importForm.getRecords().length; i++){
            if(importForm.getRecords()[i].length == ProductImportForm.PRODUCT_PROPERTIES_COUNT && importForm.getRecords()[i][1] != null && !importForm.getRecords()[i][1].equals("") && importForm.getRecords()[i][4] != null && !importForm.getRecords()[i][4].equals("")) {
                Product product = pSession.loadProductByItemCode(importForm.getRecords()[i][1]);
                
                if(importForm.getPage() == 3 && (importForm.getRecords()[i][1] != null || !importForm.getRecords()[i][1].equals(""))) {
                    if(product == null) {
                        productInsert(importForm, pSession, i);
                        insertedValues++;
                    } else if(product != null) {
                        productUpdate(importForm, pSession, product, i);
                        insertedValues++;
                    }
                } else if(importForm.getPage() == 4 && importForm.getLink().equals("1")) {
                    productInsert(importForm, pSession, i);
                    insertedValues++;
                } else if(importForm.getPage() == 4 && importForm.getLink().equals("2")) {
                    productUpdate(importForm, pSession, product, i);                
                    insertedValues++;
                }
            }
        }      
        MultiPartRequestFactory.delTmpDir(request);
        getController().removeForm(request, "productImport");
        return new ProductsSuccessfullyInserted(Integer.toString(insertedValues));
    }
    
    
    private VatCategory getVatCategory(String vatCategoryName) {
        ProductManager manager = ManagerFactoryLocator.getManagerFactory().getProductManager();
        VatCategory vatCategory = manager.getVatCategory(vatCategoryName);
        if (vatCategory == null) {
            vatCategory = manager.createVatCategory(vatCategoryName);
            manager.save(vatCategory);
        }
        return vatCategory;
    }
    
    public void productUpdate(ProductImportForm importForm, ProductSession pSession, Product product, int i) {
        String[] pathes = Utils.split(importForm.getRecords()[i][0], '@', '\\');
        productCSVImport(product, importForm, pSession, i);
        String vatCategoryName = importForm.getRecords()[i][4];
        if(vatCategoryName != null && vatCategoryName.trim().length() > 0) {
            product.setVatCategory(getVatCategory(vatCategoryName));
        }
        try {
            
            if(importForm.getRecords()[i][92] != null) {
                Vector<ProductOption> vector = new Vector<ProductOption>();
                List options = product.getOptions();
                Iterator iter = options.iterator();
                while(iter.hasNext()) {
                    ProductOption productOpt = (ProductOption) iter.next();
                    vector.addElement(productOpt);
                }

                while(!vector.isEmpty()) {
                    ProductOption productOpt = vector.firstElement();
                    vector.remove(0);
                    vector.trimToSize();
                    productOpt.delete();
                }
                addOptions(importForm.getRecords()[i][92], product);
            }
            
            if(importForm.getRecords()[i][100] != null){
                product.getQuantityPricingRules().clear();
                addQuantityPriceRule(importForm.getRecords()[i][100], product);
            }
            
            if(importForm.getRootGroup() != null && importForm.getRecords()[i][0] != null) {
        
                Set<ProductGroup> oldParents = product.getParents();
                for(int y = 0; y < pathes.length; y++) {
                    String path = pSession.loadGroup(importForm.getRootGroup()).getName() + "/" + pathes[y];
                    ProductGroup group = pSession.createGroupByPath(path);
                    if(!oldParents.remove(group))
                        group.addProduct(product);
                }
               
                for(Iterator iterator = oldParents.iterator(); iterator.hasNext();) {
                    ProductGroup oldGroup = (ProductGroup) iterator.next();
                    oldGroup.removeProduct(product);
                }
            } else if(importForm.getRootGroup() == null && importForm.getRecords()[i][0] != null) {
                Set<ProductGroup> oldParents = product.getParents(); 
                for(int y = 0; y < pathes.length; y++) {
                    String path = pathes[y];
                    ProductGroup group = pSession.createGroupByPath(path);
                    if(!oldParents.remove(group))
                        group.addProduct(product);
                }
                // Remove the old group associations that were not renewed.
                for(Iterator iterator = oldParents.iterator(); iterator.hasNext();) {
                    ProductGroup oldGroup = (ProductGroup) iterator.next();
                    oldGroup.removeProduct(product);
                }
            }
            pSession.update(product);
        } catch(Exception e) {
            String msg = "Error: ";
            logger.error(msg, e);
            throw new RuntimeException(msg, e);
        }
    }
    
    public void productInsert(ProductImportForm importForm, ProductSession pSession, int i) {
        String[] pathes = Utils.split(importForm.getRecords()[i][0], '@', '\\');
        String vatCategoryName = importForm.getRecords()[i][4];
        Product newProduct = new Product(getVatCategory(vatCategoryName), pSession);
        productCSVImport(newProduct, importForm, pSession, i);
        pSession.save(newProduct);
        try {
            if(importForm.getRecords()[i][92] != null) {
                addOptions(importForm.getRecords()[i][92], newProduct);
            }
            if(importForm.getRecords()[i][100] != null) {
                addQuantityPriceRule(importForm.getRecords()[i][100], newProduct);
            }
            if(importForm.getRootGroup() == null && importForm.getRecords()[i][0] != null){
                for(int x = 0; x < pathes.length; x++){
                    String path = pathes[x];
                    ProductGroup group = pSession.createGroupByPath(path);
                    group.addProduct(newProduct);
                }   
            } else if(importForm.getRootGroup() != null && importForm.getRecords()[i][0] != null) {
                for(int x =0; x < pathes.length; x++) {
                    String path = pSession.loadGroup(importForm.getRootGroup()).getName() + "/" + pathes[x];
                    ProductGroup group = pSession.createGroupByPath(path);
                    group.addProduct(newProduct);
                }
            }
    
        } catch(Exception e) {
            String msg = "Error: ";
            logger.error(msg, e);
            throw new RuntimeException(msg, e);
        }
    }
    
    public void productCSVImport(Product product, ProductImportForm importForm, ProductSession pSession, int i) {
        
        InventoryStatus inventory = product.getInventory();
        try {

            if(importForm.getRecords()[i][1] != null && !importForm.getRecords()[i][1].equals("")) {
                String itemCode = importForm.getRecords()[i][1];
                pSession.checkItemCodeUniqueness(itemCode, product);
                product.setItemCode(itemCode);
            }
            if(importForm.getRecords()[i][2] != null) {
                product.setName(importForm.getRecords()[i][2]);
            }
            if(importForm.getRecords()[i][3] != null) {
                try {
                    product.setPrice(Double.valueOf((importForm.getRecords()[i][3])));
                } catch(NumberFormatException ex) {}
            }
            
            if(importForm.getRecords()[i][5] != null) {
                try {
                    product.setUnitPrice(Utils.parseDouble(importForm.getRecords()[i][5])
                        .doubleValue());
                } catch(NumberFormatException ex) {}
            }
            
            if(importForm.getRecords()[i][6] != null) {
                product.setUnitType(importForm.getRecords()[i][6]);
            }
            if(importForm.getRecords()[i][7] != null) {
                try {
                    product.setPacketSize(Integer.parseInt(importForm.getRecords()[i][7]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][8] != null) {
                product.setPacketType(importForm.getRecords()[i][8]);
            }
            if(importForm.getRecords()[i][9] != null) {
                try {
                    product.setDefaultAmount(Integer.parseInt(importForm.getRecords()[i][9]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][10] != null) {
                try {
                    product.setMinAmount(Integer.parseInt(importForm.getRecords()[i][10]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][11] != null) {
                try {
                    product.setMaxAmount(Integer.parseInt(importForm.getRecords()[i][11]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][12] != null) {
                try {
                    product.setPurchasePrice(Utils.parseDouble(importForm.getRecords()[i][12]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][13] != null) {
                String visible = importForm.getRecords()[i][13];
              
                if(visible.equals("1")) {
                    product.setVisible(true);
                } else if(visible.equals("0")) {
                    product.setVisible(false);
                }
            }
            if(importForm.getRecords()[i][14] != null) {
                product.setSupplierId(importForm.getRecords()[i][14]);
            }
            if(importForm.getRecords()[i][15] != null) {
                product.setSupplierName(importForm.getRecords()[i][15]);
            }
            if(importForm.getRecords()[i][16] != null) {
                product.setSupplierItemCode(importForm.getRecords()[i][16]);
            }
            if(importForm.getRecords()[i][17] != null) {
                product.setManufacturerId(importForm.getRecords()[i][17]);
            }
            if(importForm.getRecords()[i][18] != null) {
                product.setManufacturerName(importForm.getRecords()[i][18]);
            }
            if(importForm.getRecords()[i][19] != null) {
                product.setManufacturerItemCode(importForm.getRecords()[i][19]);
            }
            if(importForm.getRecords()[i][20] != null) {
                product.setTitle1(importForm.getRecords()[i][20]);
            }
            if(importForm.getRecords()[i][21] != null) {
                product.setTitle2(importForm.getRecords()[i][21]);
            }
            if(importForm.getRecords()[i][22] != null) {
                product.setTitle3(importForm.getRecords()[i][22]);
            }
            if(importForm.getRecords()[i][23] != null) {
                product.setTitle4(importForm.getRecords()[i][23]);
            }
            if(importForm.getRecords()[i][24] != null) {
                product.setSlogan1(importForm.getRecords()[i][24]);
            }
            if(importForm.getRecords()[i][25] != null) {
                product.setSlogan2(importForm.getRecords()[i][25]);
            }
            if(importForm.getRecords()[i][26] != null) {
                product.setSlogan3(importForm.getRecords()[i][26]);
            }
            if(importForm.getRecords()[i][27] != null) {
                product.setSlogan4(importForm.getRecords()[i][27]);
            }
            if(importForm.getRecords()[i][28] != null) {
                product.setTextInfo1(importForm.getRecords()[i][28]);
            }
            if(importForm.getRecords()[i][29] != null) {
                product.setTextInfo2(importForm.getRecords()[i][29]);
            }
            if(importForm.getRecords()[i][30] != null) {
                product.setTextInfo3(importForm.getRecords()[i][30]);
            }
            if(importForm.getRecords()[i][31] != null) {
                product.setTextInfo4(importForm.getRecords()[i][31]);
            }
            if(importForm.getRecords()[i][93] != null) {
                inventory.setInventoryName(importForm.getRecords()[i][93]);
            }
            if(importForm.getRecords()[i][94] != null) {
                inventory.setSection(importForm.getRecords()[i][94]);
            }
            if(importForm.getRecords()[i][95] != null) {
                inventory.setShelf(importForm.getRecords()[i][95]);
            }
            if(importForm.getRecords()[i][96] != null) {
                String inStockStr = importForm.getRecords()[i][96];
                inventory.setAmount( inStockStr.length() == 0 ? null : new Integer(inStockStr) );
            }
            if(importForm.getRecords()[i][97] != null) {
                try {
                    inventory.setAlarmLimit(Integer.parseInt(importForm.getRecords()[i][97]));
                } catch(NumberFormatException ex) {}
            }
            if(importForm.getRecords()[i][98] != null) {
                inventory.setAlarmText(importForm.getRecords()[i][98]);
            }
            if(importForm.getRecords()[i][99] != null) {
                try {
                product.setAmountFactor(Integer.parseInt(importForm.getRecords()[i][99]));
                } catch(NumberFormatException ex) {}
            }

            product.setInventory(inventory);
            product.setLastModified(new java.util.Date());
            
        } catch(Exception e) {
            String msg = "Error: ";
            logger.error(msg, e);
            throw new RuntimeException(msg, e);
        } 
    }
    
    private void addQuantityPriceRule(String ruleString, Product product) throws ParseException, NumberFormatException {
        List rules = product.getQuantityPricingRules();
        QuantityPricingRule quantityRule = null;
        PriceRule rule = null;
        String[] rulesTable = Utils.split(ruleString, ",");
        
        for(int j = 0; j < rulesTable.length; ++j) {
            if(!rulesTable[j].equals("")) {
                rule = new PriceRule();
                quantityRule = new QuantityPricingRule();
                //split rule
                String[] tmp = Utils.split(rulesTable[j], ":");
                rule.setRule(tmp[1]);
                quantityRule.setThreshold(Integer.parseInt(tmp[0]));
                quantityRule.setPriceRule(rule);
            
                if(rules == null)
                    rules = new LinkedList();
                rules.add(quantityRule); 
                product.setQuantityPricingRules(rules);
            }        
        }
    }
    
    private boolean addOptions(String optionString, Product product) {

        Vector<ProductOption> vector = new Vector<ProductOption>();
        if(optionString == null || optionString.equals(""))
            return false;
        try {
            ProductOption productOption = null;
            ProductOptionChoice productOptionChoice = null;
            //väri:punainen,+10,option-1,2##sininen,+12,option-2,10##$$paino:kevyt,-13,option-3,20##raskas,+13,option-4,30##$$
            String[] optionsTable = Utils.split(optionString, "$$");
            for(int j = 0; j < optionsTable.length; ++j) {
                if(!optionsTable[j].equals("")) {
                    productOption = new ProductOption();
                    String[] optionValues = Utils.split(optionsTable[j], ":");
                    //In case : or , or ## used in name.
                    //if product options contain encoded separator chars, decode them.
                    productOption.setName((optionValues[0].replaceAll("&#xF5;", ":")).replaceAll(
                        "&#xB8;",
                        ",").replaceAll("&#xC9;", "##"));
                    String[] optionChoices = Utils.split(optionValues[1], "##");
                    
                    // Go through all product option choices
                    for(int u = 0; u < optionChoices.length; ++u) {
                     
                        if(!optionChoices[u].equals("")) {
                           
                            String[] choiceValues = Utils.split(optionChoices[u], ",");
                            productOptionChoice = new ProductOptionChoice();
                            // Set value for option
                            productOptionChoice
                                .setValue((choiceValues[0].replaceAll("&#xB8;", ",")).replaceAll(
                                    "&#xF5;",
                                    ":").replaceAll("&#xC9;", "##"));
                            // Set pricerule for option
                            productOptionChoice.setPriceChange(new PriceRule(choiceValues[1]));
                            // Set itemcode for option
                            productOptionChoice.setItemCodeChange((choiceValues[2].replaceAll(
                                "&#xB8;",
                                ",")).replaceAll("&#xF5;", ":").replaceAll("&#xC9;", "##"));
                           
                            // Set amount if included into csv-file
                            setOptionChoiceAmount(choiceValues, productOptionChoice);
                            productOption.addChoice(productOptionChoice);
                        
                            
                        }

                    }
                    vector.addElement(productOption);
                }

            }

        } catch(Exception e) {
            return false;
        }
        
        while(!vector.isEmpty()) {
            Object object = vector.firstElement();
            product.addOption((ProductOption) object);
            vector.remove(object);
        }

        return true;
    }
    
    private void setOptionChoiceAmount(String[] choiceValues, ProductOptionChoice productOptionChoice) {
        // If amount of product option choice set in csv file
        if(choiceValues.length == 4){
            try{
                int amount = Integer.valueOf(choiceValues[3]).intValue();
                productOptionChoice.setOptionAmount(amount);
             }catch(NumberFormatException nfe) {
                 logger.error("ProductOptionChoice amount found in csv-file is not correct integer value.", nfe);
             }
        }
    }
}


PM MAIL   Вверх
Orange
Дата 20.5.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



А насколько большая у тебя importForm? И "долго работает" - это сколько?
Вообще в такой ситуации лучше всего таймстампы про программе расставить и посмотреть где тратится больше всего времени.
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
ratzko
Дата 20.5.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



Долго это примерно так: если я добавляю продуктов 500 это занимает ну может 1-2 минуты ну если я буду добавлять 1000 продуктов то ето уже заимет минут 10-15.

Добавление продуктов оформленно в виде wizarda и в importForm хранится разли4ная сопутсбующая инфа и в ней хранится массив getRecords[][] и находятся все продукту.
PM MAIL   Вверх
Orange
Дата 20.5.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



Ставь таймстампы около вызовов каждого метода.
И основной на for(int i = 1; i < importForm.getRecords().length; i++) поставь.

Это сообщение отредактировал(а) Orange - 20.5.2008, 16:51
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
ratzko
Дата 20.5.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



медленно работает
Код

pSession.save(newProduct);


и еще медленнее сдесь:
Код

ProductGroup group = pSession.createGroupByPath(path);
group.addProduct(newProduct);


остальное нормально

ну еще сразу замедляется если в базе узе существует много продуктов!
PM MAIL   Вверх
v2v
Дата 20.5.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



а что делает функция addProduct ?


--------------------
PM   Вверх
ratzko
Дата 20.5.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



Цитата

а что делает функция addProduct ? 


дабавляет продукт в определенную группу.
PM MAIL   Вверх
LSD
Дата 20.5.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(ratzko @  20.5.2008,  17:01 Найти цитируемый пост)
а 4то еще надо показать или все собсвенняе классы показать?

Что за доступ к БД используется? Я так понял это како-то ORM. Рассказать про логику приложения, что за продукты группы, как они связанны, как это все хранится в БД и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
v2v
Дата 20.5.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



гениально! а я и не понял! оО

Код

                for(int x =0; x < pathes.length; x++) {
                    String path = pSession.loadGroup(importForm.getRootGroup()).getName() + "/" + pathes[x];
                    ProductGroup group = pSession.createGroupByPath(path); // <- !?!?!?!
                    group.addProduct(newProduct);
                }

у тебя группа на каждом шаге пересоздаётся новая!
ещё раз, что делает addProduct??


--------------------
PM   Вверх
ratzko
Дата 21.5.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 5.7.2007
Где: Estonia, Tallinn

Репутация: нет
Всего: нет



Цитата

Что за доступ к БД используется? Я так понял это како-то ORM. Рассказать про логику приложения, что за продукты группы, как они связанны, как это все хранится в БД и т.д.


Есть визард, который в на4але с4итывает csv-fail с продуктами, encoding and delimiter. Разбирает етот фаил и записывает в двумерный массив records[][]. У продукта имеется 105 свойств. В контце визард update'ид или insert'ид продукты.

В ка4естве ORM используется Hibernate.

в базе есть три таблитсы: Products, ProductGruoups and ProductGroupAssociations. Один продукт может содежатя в нескольких группах.

Цитата

ещё раз, что делает addProduct??


записывает в таблитсу ProductGroupAssociations id продуцта и группы.




PM MAIL   Вверх
v2v
Дата 21.5.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(ratzko @  21.5.2008,  11:40 Найти цитируемый пост)

записывает в таблитсу ProductGroupAssociations id продуцта и группы.

возможно имеет смысл записывать не по одному объекту  - 1000 раз , а передать список из 1000.


--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.