VO的setQueryMode究竟是如何工作的?

时间:2016-04-17 07:03:55

标签: oracle-adf

我是Oracle ADF的新手,我不了解queryMode如何工作的概念 有人可以在下面解释我 - >什么数据将在VO缓存,EO缓存时,我只做vo.executeQuery()
- >当我使用setQueryMode()并使用不同模式的vo.executeQuery()时会发生什么,例如下表中的QUERY_MODE_SCAN_VIEW_ROWS,QUERY_MODE_SCAN_ENTITY_ROWS,QUERY_MODE_SCAN_DATABASE_TABLES | QUERY_MODE_SCAN_ENTITY_ROWS。
- >当我们使用上述模式应用ViewCriteria时它的行为方式。

让我们看一下名为InfoTable的下表

ID |起始日期|结束日期|国家|状态
56 | 01-APR-16 | 31-DEC-16 |美| A
57 | 01-APR-16 | 31-DEC-16 | IND | A
58 | 14-APR-16 | 31-DEC-16 |英国| N

注意:这里是PrimarKey(id,StartDate,EndDate)

我们能否可视化EO,VO缓存中的数据,如数据库表? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

QueryMode确定VO如何处理数据:

  1. QUERY_MODE_SCAN_DATABASE_TABLES :始终从数据库获取数据(默认模式);

  2. QUERY_MODE_SCAN_VIEW_ROWS :从现有行获取数据而不从数据库中重新获取数据(在内存中);

  3. QUERY_MODE_SCAN_ENTITY_ROWS :使用实体缓存(仅适用于基于实体的VO)

  4. 排序

    当您调用QUERY_MODE_SCAN_DATABASE_TABLES的排序方法时,您的原始sql-query将由AdfBc引擎更改为:

    select * 
    from ([original select defined in your ViewObject])  
    order by field1;
    

    如果QUERY_MODE_SCAN_VIEW_ROWS排序在内存中使用Comparable接口;

    过滤

    过滤过程使用ViewCriteria,它也有queryMode:

    CRITERIA_MODE_QUERY :使用数据库检索过滤数据。在排序示例中,AdfBc还使用外部选择动态包围原始查询,其中where子句和谓词由ViewCriteria调整:

     select * 
       from ([original select defined in your ViewObject]) 
        where field1=:field1 and field2 between :field2_start and :field2_end;
    

    CRITERIA_MODE_CACHE :所有数据限制都会显示在内存中。