2016-04-29 1 views
1

myBatisからプロパティを取得する際に問題があります。それはjava.lang.NullPointerExceptionと言います。私が望むのは、データベースに値を挿入するための関数を使用した後に自動的に生成される結果マップ(私はOracle 10gを使用しています)からuser_idのみを取得することです。MyBatisから値を取得するには?

<resultMap type="User" id="userMap"> 
    <result property="userId" column="user_id"/> 
    <result property="someProperty1" column="property_1"/> 
    <result property="someProperty2" column="property_2"/> 
</resultMap> 

<insert id="addUser" parameterType="map" statementType="CALLABLE"> 
    { CALL 
    #{userResult, javaType=java.sql.ResultSet, jdbcType=CURSOR, mode=OUT, resultMap=userMap} := 
    PROJECT.create_user(
      #{surname,  javaType=String, jdbcType=VARCHAR, mode=IN}, 
      #{givenName, javaType=String, jdbcType=VARCHAR, mode=IN}, 
      #{middleName, javaType=String, jdbcType=VARCHAR, mode=IN}  
    )} 
</insert> 

を次のように

私のマッパーでの私のコードはjava.lang.NullPointerException

return Integer.parseInt(paramMap.get("userId").toString()); 

を発生するのはここ私はprivate Map<String, Object> paramMap = new HashMap<String, Object>();を使用しています。間違っているが、私は私がparamMap.get("userId")を使用しましたようですこれでは分かりません。

ご意見やご意見は非常に役に立ちます。どうもありがとう!

+0

'paramMap'または' userId'がnullの場合は、どちらがnullであるかをデバッグできます。 – Blank

+0

大丈夫@レノ! – chiliflavor

答えて

1

データベースから自動生成されたキーを戻すことは決して標準化されていないため、データベース固有の傾向があります。 Oracleでは、まずシーケンスから新しいキー値を選択し、挿入して結果を戻す必要があります。 This questionには、MyBatisプロジェクトの原油があります。

最近のJava ERマッピングフレームワークでは、これを透過的に処理しているものがあります。たとえば、Spring JDBC Templateには、データベース作業を抽象化するGeneratedKeyHolderオブジェクトがあります。例については、this questionを参照してください。

+0

が記載されています!ありがとう@kiwiron! – chiliflavor

関連する問題