2016-04-29 1 views
1

У меня возникла проблема с получением свойства из myBatis. Он говорит java.lang.NullPointerException. Я хочу получить только user_id из карты результатов, которая автоматически создается после использования функции для вставки значений в базу данных (я использую oracle 10g).Как получить значение от 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

ладно спасибо @Reno! – chiliflavor

ответ

1

Получение автоматически сгенерированных ключей из базы данных никогда не было стандартизировано, поэтому оно имеет тенденцию быть специфичным для конкретной базы данных. В Oracle вам нужно сначала выбрать новое значение ключа из последовательности, вставить и вернуть результат. This question имеет настоящее масло для проекта MyBatis.

Некоторые из более ранних каркасов отображения Java ER обрабатывают это прозрачно. Например, Spring JDBC Template имеет объект GeneratedKeyHolder, который абстрагирует работу базы данных. См., Например, this question.

+0

отмечено! спасибо @kiwiron! – chiliflavor