【问题标题】:Oracle ADF: refresh related rows after transactionOracle ADF:事务后刷新相关行
【发布时间】:2017-02-10 15:23:25
【问题描述】:

我有一个 Oracle ADF 实体,其中在数据库中强制执行的行之间存在关系。

我给你一个简化的例子:

假设 MyEntityImpl 的属性是 Customer、Month、Quantity 和 Quantity Rank。假设主键是(客户,月份)。假设“数量排名”的定义是它必须是给定月份内客户数量的密集排名。因此,当月数量最多的客户获得 1,其次是数量最多的客户获得 2,依此类推(假设按客户名称打破关系——没关系)。

此页面的 DML 设置为,当我更新任何行时,给定月份中所有客户的“数量排名”值会立即重新计算并在数据库中更新。

所以,这里的关键问题是:什么是最自然、最简单、最“ADFish”的方法,可以让我的 ADF 页面高效在任何值时重新查询并显示整个月的更新行月份有什么变化?

例如,用户在 2017 年 2 月更新客户 #100,数量为 100。这将导致 2017 年 2 月的部分(甚至全部)其他客户记录获得更新的“数量排名”值.确保我的 ADF 页面刷新那些其他记录以及实际更新的记录的最佳方法是什么?

更新

在实际问题中,“数量排名”的计算非常复杂,需要大量的其他数据库数据,这就是为什么它在数据库中完成的原因。因此,涉及 Groovy 表达式的解决方案可能不会有帮助。我尝试在实体模型中包含此计算所需的数据,以便我可以让 ADF 页面执行计算,但额外的数据明显减慢了页面速度。性能在此页面上非常重要(甚至比平时更重要)。

【问题讨论】:

    标签: oracle oracle-adf


    【解决方案1】:

    如果我理解您的问题,您希望在数据源更改时更新 ADF BC 模型。您可以从查看活动数据源文档开始,here。还有这个blog

    如果您的意思是 ADF Faces 页面通过 ADF Model 和 ADF BC 层对数据库发出更改,您可以从 ADF FACES 页面重新执行查询,使用 EL 调用数据控件上的 Execute 操作,或者刷新迭代器here

    【讨论】:

    • 感谢您的回答。我很感激你花费的时间(upvote)。我必须查看您发送的链接,看看它们是否解决了我的问题。我一直在寻找“遍历 ViewImpl.afterCommit() 事务中的行集并为每个行调用 row.refresh”的答案(这是我目前正在尝试的,但我还不知道它是否会工作的。)
    • 看起来像很多手工工作 - 为什么不直接从 DC 重新执行查询?
    • 因为通过过滤条件显示在页面上的行数将是数千。单次更新需要刷新的行数约为 10。我正在努力保持性能符合要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2012-04-14
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多