我是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缓存中的数据,如数据库表? 提前谢谢。
答案 0 :(得分:3)
QueryMode确定VO如何处理数据:
QUERY_MODE_SCAN_DATABASE_TABLES :始终从数据库获取数据(默认模式);
QUERY_MODE_SCAN_VIEW_ROWS :从现有行获取数据而不从数据库中重新获取数据(在内存中);
QUERY_MODE_SCAN_ENTITY_ROWS :使用实体缓存(仅适用于基于实体的VO)
排序:
当您调用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 :所有数据限制都会显示在内存中。