2015-10-13 98 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逗号分隔的相应属性列表。 –

相关问题