Java 如何在运行时插入时自动生成两个值?
我在JAVA中使用MyBatis作为DB框架,并试图在表中插入行时自动生成两个值:任务id和另一个值。这是我的疑问:Java 如何在运行时插入时自动生成两个值?,java,mybatis,Java,Mybatis,我在JAVA中使用MyBatis作为DB框架,并试图在表中插入行时自动生成两个值:任务id和另一个值。这是我的疑问: <insert id="insertTwoValuesSequentialluy" parameterType="com.example.autogenerated.Task" > <selectKey resultType="java.lang.String" keyProperty="taskId" order="BEFORE" > s
<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>
代码工作正常,但我遇到了以下问题:虽然在运行时任务实例设置了其成员taskId,但autogeneratedValue的情况并不相同,尽管在检查数据库时,我可以看到与autogeneratedValue匹配的列对于这一新行不为null。如何在运行时设置autogeneratedValue,而无需进行select查询
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>
您可以这样做:
<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>
属性keyColumn中是id还是taskId?我得到了一个SQLException:此函数不受支持,错误代码[17023]我输入错误-keyColumn应该包含以逗号分隔的列列表和以逗号分隔的相应属性列表。可能。但您问题中的SQL insert语句意味着任务标识符的列名是taskId,而另一列名是autogeneratedValue。它是属性keyColumn中的id还是taskId?我得到一个SQLException:不支持此函数,错误代码[17023]我输入错误-keyColumn应该包含逗号分隔的列列表和keyProperty逗号分隔的相应属性列表。但问题中的SQL insert语句意味着任务标识符的列名是taskId,而另一个列名是autogeneratedValue。