repository - ATG - 如何覆盖插入语句的 RQL
问题描述
我需要使用表的序列将记录插入到已经有记录的 Oracle DB 表中。
我尝试使用 RQL 为主键创建一个自动生成的 id,但有时这些生成的 id 已经存在于数据库中,因此会引发约束冲突错误。
ATG 文档提供了一个名为Overriding RQL-Generated SQL的替代方法,但我没有设法使其适用于插入语句。
GSARepository repo =
(GSARepository)request.resolveName("/examples/TestRepository");
RepositoryView view = repo.getView("canard");
Object params[] = new Object[4];
params[0] = new Integer (25);
params[1] = new Integer (75);
params[2] = "french";
params[3] = "greek";
Builder builder = (Builder)view.getQueryBuilder();
String str = "SELECT * FROM usr_tbl WHERE (age_col > 0 AND age_col < 1
AND EXISTS (SELECT * from subjects_tbl where id = usr_tbl.id AND subject
IN (2, 3)))";
RepositoryItem[] items =
view.executeQuery (builder.createSqlPassthroughQuery(str, params));
有什么方法可以通过 ATG Repository API 将表的序列用于插入语句?
解决方案
最终,我没有设法让它工作,但我找到了以下解决方案。
我检索到如下序列号,然后在 RQL 插入语句中使用它。
RepositoryView view = getRestServiceDetailsRepository().getView("wsLog");
String sql = "select log_seq.nextval from dual";
Object[] params = {};
Builder builder = (Builder) view.getQueryBuilder();
Query query = builder.createSqlPassthroughQuery(sql, params);
RepositoryItem[] items = view.executeQuery(query);
if (items != null && items.length > 0) {
items[0].getRepositoryId();
}
推荐阅读
- javascript - 是否可以在没有 jQuery 的情况下使用 owl carousel 进行反应
- sql - 从超表中选择数据
- symfony - 如何通过 ENV 变量切换授权方法?
- node.js - 如何在 Laravel 8 中使用 SASS?
- python - 由于精度问题,python搜索浮点数返回错误?
- arduino - 我不知道我的代码有什么问题,随机发生的事情
- vue.js - Vuetify - 如何在自定义构建中禁用显示助手?
- javascript - 如何在特定时间后运行一个函数,该时间由点击之类的事件触发(原生 JavaScript)
- php - CakePHP 4 和 Authentication 2 插件 - 记住我不会创建 Cookie
- android - 尝试在空对象引用 (MessageActivity.java:150) 上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)”