pavor84 / acacia-business-ace

Automatically exported from code.google.com/p/acacia-business-ace
0 stars 0 forks source link

parameter NULL in PurchaseOrderListBean.listPendingOrders(...) #50

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
На метода private List<PurchaseOrder> listPendingOrders се 
подава параметър
BusinessPartner supplier който може да съдържа 
стойност NULL. Даже метода
getPendingOrders експлицитно подава стойност NULL. SQL 
стандарта и
реализациите не гарантират за коректност и 
повтаряемост на резултатите при
подаване на стойност NULL като параметър. 
ЕДИНСТВЕНИЯ начин за да се
гарантира правилната работа на един такъв 
SQL израз е:
1. SQL израза да се замени от "column = null" на "column is 
null"
2. или просто това условия да се махне 
когато стойността на параметъра е null.
Аз ще оправя кода, но искам да помоля да се 
ревизира целия код, защото това
може да дава много странни и неповторяеми 
грешки които много трудно да се
хванат. Ако не го бях видял, сигурно щях да 
имам големи проблеми в бъдеще.
Сега вече ще го имам в предвид, че SQL 
изразите не са написани правилно.

Original issue reported on code.google.com by mnac...@gmail.com on 1 Jun 2009 at 4:21

GoogleCodeExporter commented 9 years ago
Това е уникален код, който трябва да бъде 
публикуван и даван за пример:
        @NamedQuery
            (
                name = "PurchaseOrder.findPendingForParentAndDeleted",
                query = "select po from PurchaseOrder po where
po.dataObject.parentDataObjectId = :parentDataObjectId " +
                        "and po.dataObject.deleted = :deleted " +
                        "and (po.status = :status_sent or po.status =
:status_partlyConfirmed) " +
                        "and (po.supplier = :supplier or :supplier is null) " +
                        "and (po.branch = :branch or :branch is null)"
            )
Например:
1. Когато параметъра ":supplier" има стойност null 
ще се получи:
   "po.supplier = null or null is null"
2. А, когато параметъра ":supplier" е различен от 
null (например 123) ще се получи:
   "po.supplier = 123 or 123 is null"
И при двата случая няма база данни в света 
която да гарантира връщането на правилен и
предварително очакван резултат.

Original comment by mnac...@gmail.com on 1 Jun 2009 at 4:41