oracle mybatis ,在插入时,有时出错,有时没问题。
<insert id="insert" parameterType="com.uet.course.entity.Question"> <selectKey resultType="java.lang.Long" keyProperty="id" order="BEFORE"> SELECT SEQ_T_QUESTION.nextval from dual </selectKey> INSERT INTO T_QUESTION( COURSE_ID, PARENT_ID, QUESTION_TYPE_ID, CHAPTER_ID, SECTION_ID, KNOWLEDGE_POINT_ID, TEACHER_ID, ANSWER, TEST_SITES, ANALYSIS, DIFFICULTY_LEVEL, SCORING_RATE, DISCRIMINATION, QUESTION_SOURCE, NODE_TYPE, QUESTION_CATEGORY, SCORE, SORT, CREATE_TIME, CREATE_USER, UPDATE_TIME, UPDATE_USER, STATUS, IS_RESPONDER, RESPONDER_TIME, TOPIC, STEM, ANALYZE, OPINION,QUESTION_ID ) VALUES( #{courseId,jdbcType=NUMERIC}, #{parentId,jdbcType=NUMERIC}, #{questionTypeId,jdbcType=NUMERIC}, #{chapterId,jdbcType=NUMERIC}, #{sectionId,jdbcType=NUMERIC}, #{knowledgePointId,jdbcType=NUMERIC}, #{teacherId,jdbcType=NUMERIC}, #{answer,jdbcType=VARCHAR}, #{testSites,jdbcType=VARCHAR}, #{analysis,jdbcType=VARCHAR}, #{difficultyLevel,jdbcType=NUMERIC}, #{scoringRate,jdbcType=VARCHAR}, #{discrimination,jdbcType=VARCHAR}, #{questionSource,jdbcType=NUMERIC}, #{nodeType,jdbcType=NUMERIC}, #{questionCategory,jdbcType=NUMERIC}, #{score,jdbcType=VARCHAR}, #{sort,jdbcType=NUMERIC}, #{createTime,jdbcType=TIMESTAMP}, #{createUser,jdbcType=NUMERIC}, #{updateTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=NUMERIC}, #{status,jdbcType=NUMERIC}, #{isResponder,jdbcType=NUMERIC}, #{responderTime,jdbcType=NUMERIC}, #{topic,jdbcType=VARCHAR}, #{stem,jdbcType=VARCHAR}, #{analyze,jdbcType=VARCHAR}, #{opinion,jdbcType=VARCHAR}, #{id,jdbcType=NUMERIC} ) </insert>
错误是因为在绑定参数时把数据库中字段类型为LONG的字段放置在其他字段前设置了,只要将类型为LONG的字段绑定参数时放在最后设置即可解决。
上面的xml是正确的,因为已经把ID换到了最后。
但是这是因为什么呢?
这三个都是clob类型,为什么clob类型不能放在最后呢?
道理上来讲,不同类型,放在哪里都是可以的
有可能是oracel本身的bug