Оператор SQL не удалось в ATG

Я работаю в приложении ATG. Сегодня я получил следующее исключение SQL в /atg/userprofiling/ProfileAdapterRepository, и это из-за нарушения ограничения уникальности.

atg.repository.RepositoryException; SOURCE:java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (DCS_USR_ACTVPROM_P) violated

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

МетодhandleLogin объекта atg.scenario.userprofiling.ScenarioProfileFormHandler был вызван из пользовательского FormHandler. Я не смог найти поток после вызова этого метода. После этого вызова метода возникает исключение.

Может кто-нибудь сообщить мне, что происходит внутри этого метода и откуда SQL-запросы выполняются в ATG для приведенной выше таблицы, пожалуйста?

1 ответ

Вы не добавили фактический sql, который пытаетесь запустить, но сообщение об ошибке в значительной степени говорит обо всем. Вы нарушаете unique ограничение.

Предположим, у вас есть таблица Foo и у вас есть unique колонка, называемая bar, Если вы намереваетесь вставить запись в Foo, иметь bar ценность 'loremipsum', тогда утверждение не будет успешным, если ваш Foo таблица уже имеет запись, где bar имеет значение 'loremipsum',

В результате insert из:

insert into Foo(bar)
values('loremipsum');

есть риск провала. Чтобы предотвратить этот риск, вы должны проверить, существует ли уже значение, например:

insert into Foo(bar)
select 'loremipsum'
from Foo
where 'loremipsum' not in (select distinct bar from Foo)
Другие вопросы по тегам