如何在运行时插入时自动生成两个值?

时间:2015-10-13 12:08:28

标签: java mybatis

我在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>

代码工作正常,但我遇到以下问题:在运行时,Task实例的成员 taskId 已设置,但不会发生相同的情况autogeneratedValue ,虽然当我检查数据库时,我可以看到匹配 autogeneratedValue 的列对于这个新行不是空的。如何在运行时设置 autogeneratedValue 而无需进行选择查询?

PS:不要注意逗号等,我有很多专栏,我已经删除了大部分内容,并更改了其余部分的名称。我对代码的看法是让你了解我是如何生成价值的,我用过的标签等等。

1 个答案:

答案 0 :(得分: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>