Ошибка преобразования идентификатора в Int64 в NUMBER (18) - PullRequest
0 голосов
/ 23 февраля 2012

Я использую Fluent NHibernate в качестве слоя ORM для своей базы данных Oracle 10g и использую триггер перед вставкой для создания уникального идентификатора (с последовательностью) при вставке записи.

-- Within the trigger
SELECT myseqgen.nextval into :NEW.ID FROM DUAL;

Свойство id в коде - это long (Int64), которое нельзя изменить на десятичное, чтобы лучше соответствовать тому, что мы имеем в базе данных (общая библиотека).Я сопоставил это следующим образом:

this.Id(x => x.Id, "ID")
    .CustomSqlType("NUMBER(18)")
    .CustomType(typeof(IdCustomType))
    .GeneratedBy.TriggerIdentity();

Хотя я создал собственный тип для этого свойства, я не думаю, что он мне нужен, потому что в базе данных идентификатор настроен следующим образом:

CREATE TABLE "SOME_SCHEMA"."MY_TABLE" 
    ("ID" NUMBER(18,0), -- 18 means "anything up to 64 bit integer"
    ...

Что интересно, так это то, что внутри метода NullSafeSet моего класса IdCustomType параметр «value» передается как десятичное число.

... не только это, но и после проверкиNHProf, оператор вставки вызывает беспокойство:

INSERT INTO MY_TABLE
        (COL_ONE,
         COL_TWO,
         COL_THREE,
         COL_FOUR,
         COL_FIVE,
         COL_SIX,
         COL_SEVEN)
VALUES      ('param one' /* :p0 */,
         'param two' /* :p1 */,
         NULL /* :p2 */,
         'param three' /* :p3 */,
         TIMESTAMP '2012-01-01 00:00:00.00' /* :p4 */,
         '22' /* :p5 */,
         '''81189'' [Type: String (5)], :nhIdOutParam = NULL' /* :p6 */)  -- WHAT!?
returning ID into :nhIdOutParam

После оператора вставки вызывается автоматический выбор моего идентификатора параллелизма:

SELECT someRow_.CONCURRENCY_COL as CON_2_1_
FROM   MY_TABLE someRow_
WHERE  someRow_.ID = 5836738 /* :p0 */

... ничего не найдено.

Есть ли у кого-нибудь предложения?

Спасибо, Роб

1 Ответ

0 голосов
/ 23 февраля 2012

oracle использует синтаксис returning ID into :nhIdOutParam для помещения сгенерированного идентификатора в выходной параметр nhIdOutParam, который NH предоставляет команде для получения идентификатора после завершения вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...