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