Mybatisはデータを挿入してプライマリ・キー値を返します
2143 ワード
Oracleでレコードを挿入したばかりのプライマリ・キー値を取得するには、次の手順に従います.
要点は、ここでselectKeyを使用して、新しく生成されたPrimaryKeyを返すことを定義します.これはOracleにのみ適用されます.
注意すべき点はJavaコードでIntegerタイプを使用するが、MyBatisのマッピングファイルではjavaを使用する.math.BigDecimalタイプです.そうしないと、タイプ変換または不一致のエラーが表示されます.
MySQLとSQL Serverは、挿入したデータのプライマリ・キー値を取得します.
useGeneratedKeys/KeyPropertyを使用してデータの挿入を実現する場合、新しく生成されたプライマリ・キーの戻りを完了します.
例外情報の解決:
例外情報:
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException:無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; nested exception is java.sql.SQLException:無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor
問題解決:
問題は、Javaコードに返されるプライマリ・キーのデータ型を設定ことであり、返されるデータ型はjavaである.BigDecimalとLongではなくただし、MyBatisのマッピングファイルのタイプはjavaです.math.BigDecimal.
転入元:MyBatisはプライマリ・キー値を返します.
<insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">
<selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
SELECT U_USER_INFO_SEQ.Nextval as ID from DUAL
</selectKey>
insert into U_USER_INFO
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
ID,
</if>
<if test="userName != null" >
USER_NAME,
</if>
<if test="realName != null" >
REAL_NAME,
</if>
.....
</insert>
要点は、ここでselectKeyを使用して、新しく生成されたPrimaryKeyを返すことを定義します.これはOracleにのみ適用されます.
注意すべき点はJavaコードでIntegerタイプを使用するが、MyBatisのマッピングファイルではjavaを使用する.math.BigDecimalタイプです.そうしないと、タイプ変換または不一致のエラーが表示されます.
MySQLとSQL Serverは、挿入したデータのプライマリ・キー値を取得します.
<insert id="insert" parameterType="Spares"
useGeneratedKeys="true" keyProperty="id">
insert into spares(spares_id,spares_name,
spares_type_id,spares_spec)
values(#{id},#{name},#{typeId},#{spec})
</insert>
useGeneratedKeys/KeyPropertyを使用してデータの挿入を実現する場合、新しく生成されたプライマリ・キーの戻りを完了します.
例外情報の解決:
例外情報:
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException:無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; nested exception is java.sql.SQLException:無効な列タイプ:getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor
問題解決:
問題は、Javaコードに返されるプライマリ・キーのデータ型を設定ことであり、返されるデータ型はjavaである.BigDecimalとLongではなくただし、MyBatisのマッピングファイルのタイプはjavaです.math.BigDecimal.
転入元:MyBatisはプライマリ・キー値を返します.