[英]How to work with map property in RQL (Oracle's ATG Web Commerce)
[英]ATG - How to override RQL for insert statements
我需要使用表的序列將記錄插入到已包含記錄的Oracle DB表中。
我嘗試使用RQL為主鍵創建自動生成的id,但有時這些生成的id已經存在於數據庫中,因此會引發約束違規錯誤。
ATG文檔提供了一個名為Overriding RQL-Generated SQL的替代方法,但我沒有設法使其適用於insert語句。
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將表序列用於insert語句?
最終,我沒有設法讓它工作,但我找到了以下解決方案。
我檢索了如下的序列號,然后在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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.