2012-02-23 3 views
0

저는 Oracle 10g 데이터베이스의 ORM 레이어로 Fluent NHibernate를 사용하고 있습니다. 레코드를 삽입 할 때 이전 삽입 트리거를 사용하여 고유 ID (시퀀스 포함)를 만듭니다.Int64 to NUMBER (18) ID 변환 오류

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

코드의 ID 속성은 더 나은 우리가 데이터베이스 (공통 라이브러리)에있는 것과 일치하는 진수로 변경할 수 없습니다 긴 (INT64)입니다. 다음과 같이 나는이 매핑 한 다음과 같이 나는이 부동산에 대한 사용자 정의 유형을 만든 반면

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

가, 내가 있기 때문에 데이터베이스에 필요로한다고 생각하지 마십시오 ID가 구성됩니다

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

그러나 흥미로운 점은 내 IdCustomType 클래스의 NullSafeSet 메서드 내에서 "value"매개 변수가 소수로 전달된다는 것입니다.

...뿐만 아니라 그 NHProf 확인시 삽입 문이 걱정 스레되고 있지만 : INSERT 문 후

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 */ 

... 아무것도 찾을 수 없습니다.

아무에게도 제안 사항이 있습니까?

덕분 롭

+0

성공적으로 삽입했는지 확인 했습니까? – Firo

답변

0

오라클 삽입이 완료된 후에 명령 NH 공급 ID를 얻을 nhIdOutParam라는 출력 파라미터로 생성 된 ID를 배치 구문 returning ID into :nhIdOutParam을 이용한다.

+0

하지만이 비트는? # :'' '81189' '[Type : String (5)], : nhIdOutParam = NULL'/ * : p6 */ p6은 '81189'이어야합니다. 더 이상 ... NHibernate가 표준 " into "구문을 사용하지만 p6의 추가 정보를 추가하는 이유는 아닙니다! – Rob

+0

어쩌면 그것이 출력되지 않은 경우에도 쿼리에 out 매개 변수를 씁니다.보고있는 출력이 올바르지 않습니다. 생성 된 선택을 직접 실행하여 오라클에 삽입했는지 여부를 확인 했습니까? – Firo

관련 문제