2015-10-13 103 views
1

我在JAVA中使用MyBatis作爲數據庫框架,我試圖在表中插入行時自動生成兩個值:任務ID和另一個值。這是我的查詢:如何在運行時插入時自動生成兩個值?

<insert id="insertTwoValuesSequentialluy" parameterType="com.example.autogenerated.Task" > 
    <selectKey resultType="java.lang.String" keyProperty="taskId" order="BEFORE" > 
     select MY_TASK_ID_SEQUENCE.nextval from dual 
    </selectKey> 
    insert into DYDA_D.TASK_TABLE (taskId, otherVariable, autogeneratedValue) 
    values (#{taskId,jdbcType=VARCHAR}, 
      #{otherVariable,jdbcType=VARCHAR}, 
      MY_SECOND_SEQUENCE.nextval = #{autogeneratedValue,jdbcType=VARCHAR}) 
</insert> 

代碼工作正常,但我有以下問題:當在運行任務實例獲取其成員任務id設置好的,它不會發生同樣與autogeneratedValue ,雖然當我檢查數據庫時,我可以看到匹配的列autogeneratedValue對於這個新行不爲空。如何在運行時設置自動生成值而不需要進行選擇查詢?

PS:不注意逗號等,我有很多列,我已經刪除了大部分列表,並在其他部分更改了這個片段的名稱。我的代碼點是你看我怎麼已經生成的值,我用等標籤

回答

0

你可以做到這一點是這樣的:

<insert id="insertTwoValuesSequentialluy" 
     parameterType="com.example.autogenerated.Task" 
     useGeneratedKeys="true" 
     keyProperty="taskId,autogeneratedValue" 
     keyColumn="taksId,autogeneratedValue"> 
    insert into DYDA_D.TASK_TABLE (taskId, otherVariable, autogeneratedValue) 
    values (MY_TASK_ID_SEQUENCE.nextval, 
      #{otherVariable,jdbcType=VARCHAR}, 
      MY_SECOND_SEQUENCE.nextval) 
</insert> 
+0

是它的ID或任務id屬性中keyColumn ? – Fernando

+0

我得到一個SQLException:這個函數不被支持,錯誤代碼[17023] – Fernando

+0

我輸入錯誤 - keyColumn應該包含逗號分隔的列和keyProperty逗號分隔的相應屬性列表。 –

相關問題