2014-10-20 1 views
0

iBatis를 처음 사용했습니다. 우리 프로젝트에서 iBatis를 사용하여 Oracle DB의 Java 객체를 유지합니다. 나는 클래스, 클래스, 3 컬럼 : ID, 이름 및 설명을 가지고있다. 데이터는 TableA에 지속될 것입니다. 이 테이블에는 ID 열의 값을 생성하는 시퀀스가 ​​DB에 있습니다. 다음 표와 같이이 테이블에 insert 문을 작성했습니다.iBatis insert statement NPE 던지기

<insert id="insertTableA" parameterClass="com.ClassA"> 
    <selectKey resultClass="java.lang.Long" keyProperty="id"> 
     SELECT seq_TableA.nextval as id FROM dual 
    </selectKey> 
    INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#) 
</insert> 

이 작업은 정상적으로 수행되었습니다.

그러나 우리 고유의 UI 프레임 워크 제한 때문에 일부 디자인을 변경해야했습니다. 그래서 우리는 먼저 sequence로부터 id를 long으로 생성하고, 이름과 설명과 함께 ClassA의 인스턴스에 그 값을 설정 한 다음 DB에 삽입해야합니다. 따라서이 경우 삽입 통계에는 selectKey 속성이 필요하지 않습니다. ID가이고 이름이이고 설명 값이 인 경우 아래 쿼리를 업데이트하면 Null 포인터 예외이 발생합니다.

<insert id="insertTableA" parameterClass="com.ClassA"> 
    INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#) 
</insert> 

a를 사용하지 않고 테이블에 데이터를 삽입하는 방법. 나는

getSqlTemplate().insert("process.insertTableA", instanceClassA); 

모든 포인터를 환영합니다,

감사합니다, SD, 모든 값이 ID를 포함하여 다음과 같이 자바에서 문을 호출하는 시도와 객체의 이식, 첫번째 순서에서 키를 생성하고

답변

0

클래스에 getId() 메서드를 포함하여 id 필드의 값을 반환했는지 확인 했습니까?