如何在运行时插入时自动生成两个值?
问题描述:
我在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:不注意逗号等,我有很多列,我已经删除了大部分列表,并在其他部分更改了这个片段的名称。我的代码点是你看我怎么已经生成的值,我用等标签
答
你可以做到这一点是这样的:
<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>
是它的ID或任务id属性中keyColumn ? – Fernando
我得到一个SQLException:这个函数不被支持,错误代码[17023] – Fernando
我输入错误 - keyColumn应该包含逗号分隔的列和keyProperty逗号分隔的相应属性列表。 –