ATG - Как переопределить RQL для операторов вставки - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно вставить записи в таблицу БД Oracle, в которой уже есть записи, используя последовательность таблиц.

Я пытался использовать RQL, который создает автоматически сгенерированный идентификатор для первичного ключа, но иногда сгенерированныйидентификаторы уже существуют в базе данных, и в результате выдается ошибка нарушения ограничения.

В документации ATG есть альтернатива с именем Переопределение сгенерированного RQL 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));

Можно ли использовать последовательность таблиц для операторов вставки через API репозитория ATG?

1 Ответ

0 голосов
/ 28 мая 2019

В конце концов мне не удалось заставить его работать, но я нашел следующее решение.

Я получил порядковый номер, как показано ниже, а затем использовал его в операторе вставки 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();
}
...