Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时插入时自动生成两个值?_Java_Mybatis - Fatal编程技术网

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

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

我在JAVA中使用MyBatis作为DB框架,并试图在表中插入行时自动生成两个值:任务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>
代码工作正常,但我遇到了以下问题:虽然在运行时任务实例设置了其成员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。