SQL-запрос из выражения Toplink - PullRequest
3 голосов
/ 23 марта 2011

У меня есть объект выражения oracle.toplink.expressions.Expression, который был создан с помощью oracle.toplink.expressions.ExpressionBuilder. Я хочу найти его эквивалентный SQL-запрос (скажем, выберите emp.empname, emp.empId from employee emp), который в конечном итоге будет запущен для получения данных. Я хочу найти его эквивалент Statement / PreparedStatement или что-нибудь, что поможет мне получить необработанный оператор SQL, который скоро будет запущен.

Например, Ниже приведено выражение для верхней ссылки:

expressionBuilder.get("empName").equal("Eric");

и я хочу получить эквивалентный SQL-запрос:

select emp.empName,emp.emp_id,emp.sal from employee emp where emp.empName like 'Eric'

Пожалуйста, дайте мне знать, если есть какой-либо API для получения Sol. Я попробовал классы имплементации DatabaseQuery, но не смог найти какой-либо метод, который мог бы выполнить это.

Ниже приведено выражение toplink со мной:

Logical operator  AND 
   Logical operator  AND 
      Logical operator  AND 
         Logical operator  AND 
            Logical operator  AND 
               Logical operator  AND 
                  Logical operator  AND 
                     Logical operator  AND 
                        Relation operator  < 
                           Query Key minEffectiveBegDate
                              Base com.altra.common.data.OperationalTrxData
                           Constant Tue Feb 01 08:00:00 CST 2011
                        Relation operator  > 
                           Query Key maxEffectiveEndDate
                              Base com.altra.common.data.OperationalTrxData
                           Constant Sat Jan 01 08:00:00 CST 2011
                     Relation operator  < 
                        Query Key begDate
                           Query Key calculatedQuantityDataList
                              Query Key qtyClassificationDataList
                                 Query Key operationalQuantityDataList
                                    Base com.altra.common.data.OperationalTrxData
                        Constant Tue Feb 01 08:00:00 CST 2011
                  Relation operator  > 
                     Query Key endDate
                        Query Key calculatedQuantityDataList
                           Query Key qtyClassificationDataList
                              Query Key operationalQuantityDataList
                                 Base com.altra.common.data.OperationalTrxData
                     Constant Sat Jan 01 08:00:00 CST 2011
               Relation operator  = 
                  Query Key opsTrxClassification
                     Base com.altra.common.data.OperationalTrxData
                  Constant -5001579
            Relation operator  = 
               Query Key accountingCompany
                  Base com.altra.common.data.OperationalTrxData
               Constant 1196
         Logical operator  OR 
            Logical operator  AND 
               Relation operator  = 
                  Query Key sourceRelatedNodeObjType
                     Base com.altra.common.data.OperationalTrxData
                  Constant -2094
               Relation operator  IN 
                  Query Key sourceRelatedNodeObjId
                     Base com.altra.common.data.OperationalTrxData
                  Constant [4187]
            Logical operator  AND 
               Relation operator  = 
                  Query Key dispositionRelatedNodeObjType
                     Base com.altra.common.data.OperationalTrxData
                  Constant -2094
               Relation operator  IN 
                  Query Key dispositionRelatedNodeObjId
                     Base com.altra.common.data.OperationalTrxData
                  Constant [4187]
      Relation operator  = 
         Query Key qtyType
            Query Key operationalQuantityDataList
               Base com.altra.common.data.OperationalTrxData
         Constant -5000328
   Relation operator  = 
      Query Key qtyStatus
         Query Key qtyClassificationDataList
            Query Key operationalQuantityDataList
               Base com.altra.common.data.OperationalTrxData
      Constant -5000316

Я хочу SQL-эквивалент, такой как

select otd.operationaltrx_id,otd.accountingCompany from OperationalTrxData otd where minEffectiveBegDate > to_date('','') ...

Спасибо, Adithya.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Используя ReportQuery, чтобы выбрать нужные поля, затем «подготовить» запрос и распечатать сгенерированный SQL:

ExpressionBuilder emp = new ExpressionBuilder(Employee.class);
ReportQuery query = new ReportQuery(Employee.class, emp);
query.addAttribute("empName");
query.addAttribute("emp_id");
query.addAttribute("sal");

query.setSelectionCriteria(emp.get("empName").equal("Eric"););
query.prepareCall(session, new DatbaseRecord());
String sql = query.getSQLString();
1 голос
/ 28 марта 2011

Вам необходимо использовать ReportQuery.

ExpressionBuilder emp = new ExpressionBuilder();
ReportQuery query = new ReportQuery(Employee.class, emp);
query.addAttribute("empName");
query.addAttribute("emp_id");
query.addAttribute("sal");

query.setSelectionCriteria(emp.get("empName").equal("Eric"););
List reports = (List) session.executeQuery(query);
...