【问题标题】:SQL query from Toplink expression来自 Toplink 表达式的 SQL 查询
【发布时间】:2020-04-30 03:52:28
【问题描述】:

我有一个 oracle.toplink.expressions.Expression 表达式对象,它是使用 oracle.toplink.expressions.ExpressionBuilder 创建的。我想找到它的等效 SQL 查询(比如从员工 emp 中选择 emp.empname,emp.empId),它最终将被触发以获取数据。我想找到它的等价 Statement/PreparedStatement 或任何能帮助我获得即将被触发的原始​​ SQL 语句的东西。

例如 以下是 toplink 表达式:

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('','') ...

谢谢, 阿迪提亚。

【问题讨论】:

    标签: toplink


    【解决方案1】:

    使用 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();
    

    【讨论】:

    • 嗨,戈登,您在上述解决方案中谈论的是哪种类型的查询?我的意思是可以使用表达式创建哪个查询?我试过 DataModifyQuery 但没有用。
    • 嗨,戈登,您在上述解决方案中谈论的是哪种类型的查询?我的意思是可以使用表达式创建哪个查询?我尝试了 DataModifyQuery 但它没有用。以下是我尝试过的: DatabaseQuery query = new DataModifyQuery(expression.toString()); query.prepareCall(getSession(), new DatabaseRecord()); String sql = query.getSQLString();
    【解决方案2】:

    您需要使用 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);
    

    【讨论】:

    • 这只是我给出的一个例子..我不知道我要获取的属性;我只有表情。使用我想要获取将被触发的 SQL 查询的表达式,即我想要我拥有的 toplink 表达式的等效 SQL 查询。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多