2016-04-29 122 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'爲空,你可以調試它看看哪一個是空的。 – Blank

+0

好的,謝謝@Reno! – chiliflavor

回答

1

從數據庫中獲取自動生成的密鑰從未標準化過,因此它往往是數據庫特定的。對於Oracle,您需要先從序列中選擇新的鍵值,然後執行插入並返回結果。 This question擁有MyBatis項目的真正原油。

一些較新的Java ER映射框架正在透明地處理這個問題。例如Spring JDBC Template有一個抽象數據庫工作的GeneratedKeyHolder對象。舉例來說,請參閱this question

+0

注意!感謝@kiwiron! – chiliflavor