0

自動生成された列で生成するテーブルがありますが、MyBatisを使用してIDを取得できません。SQLが機能し、行が挿入されていることをテストで証明しましたが、IDを生成できません。

XML構成は次のとおりです。

<insert id="insertRequestTrackingRow" parameterType="map">
    INSERT INTO XML_LOG_T (REQ_SRC_SYS_CDE, REQ_USR_ID, REQ_XML_DOC, ROW_CRT_DTM, ROW_UPDT_DTM)
    VALUES (#{sourceSystemCode}, #{userID}, #{message}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
</insert>

XML_LOG_Tには、自動生成されるREQ_ID列があります。私のマッパーインターフェースは次のとおりです。

public interface UdbDataMapper {
    int insertRequestTrackingRow(
            @Param("message") String message,
            @Param("sourceSystemCode") String sourceSystemCode,
            @Param("userID") String userID);
}

返されるのは常に1で、これは挿入されたレコードの数だと思います。明らかな何かが欠けていると確信していますが、木のために木を見ることができません。

4

2 に答える 2

1

これを行う方法のかなり良い説明があります。

基本的に、INSERTステートメントのXML構成でuseGeneratedKeys="true"およびkeyproperty="keyfield"属性を使用する必要があります。返されたキーフィールド値は、パラメータオブジェクトに挿入され、そこから取得できます。次のコードサンプルのようなものが機能するはずです。

SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("sqlConfig.xml"));
SqlSession sess = sqlMapper.openSession();
try {
   Map<String,String> paramObj = new HashMap<String,String>();
   paramObj.put("param1", "value");
   int result = sess.insert("insertRequestTrackingRow", paramObj);
   System.out.println("REQ_ID: " + paramObj.get("REQ_ID"));
}
finally {
   sess.close();
}
于 2011-07-15T16:47:07.473 に答える
0

どうですか

<insert id="insertRequestTrackingRow" parameterType="map" 
        useGeneratedKeys="true" keyProperty="id">
    INSERT INTO XML_LOG_T (REQ_SRC_SYS_CDE, REQ_USR_ID, REQ_XML_DOC, ROW_CRT_DTM, ROW_UPDT_DTM)
    VALUES (#{sourceSystemCode}, #{userID}, #{message}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
</insert>
于 2011-07-15T16:36:03.930 に答える