Триггеры HSQL: пользователю не хватает прав или объект не найден: NEWROW.ID - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь реализовать триггеры в hsql после обновления, где у меня есть одна таблица с именем таблица компонентов, и при обновлении в этой таблице я хочу записать ее в другую таблицу, используя триггер после вставки, для которого я делаю

CREATE TABLE IF NOT EXISTS "component"(
   "id" INTEGER IDENTITY,
   "name" VARCHAR(100),
   "configuration" LONGVARCHAR,
   "owner_id" INTEGER   );

CREATE TABLE IF NOT EXISTS "component_audit"(
   "id" INTEGER IDENTITY,
   "component_id" INTEGER ,
   "action" VARCHAR(20),
   "activity_time" BIGINT,
   "user_id" INTEGER,
   FOREIGN KEY ("component_id") REFERENCES "component"("id") ON UPDATE RESTRICT ON DELETE CASCADE
);

    CREATE TRIGGER trig AFTER INSERT ON "component"
       REFERENCING NEW ROW AS newrow
       FOR EACH ROW
       INSERT INTO "component_audit" ("id","component_id","action","activity_time","user_id")
       VALUES (DEFAULT, 1, newrow.id, 123, 1);

При запуске HSQL выдает ошибку

Вызывается: org.hsqldb.HsqlException: пользователю не хватает привилегии или объект не найден: NEWROW.ID

Это из-замой столбец идентификатора находится в "id", потому что он мне нужен в маленьких заглавных буквах (по DEFAULT HSQLDB в верхнем регистре), как передать мою переменную подстановку?

1 Ответ

0 голосов
/ 29 ноября 2018

Просто используйте то же имя, что и в вашем операторе CREATE TABLE.

CREATE TRIGGER trig AFTER INSERT ON "component"
   REFERENCING NEW ROW AS newrow
   FOR EACH ROW
   INSERT INTO "component_audit" ("id","component_id","action","activity_time","user_id")
   VALUES (DEFAULT, 1, newrow."id", 123, 1);
...