結果マップの 1 つで、パッケージIntegerTypeHandler
からデフォルトを構成しようとしています。org.apache.ibatis.type
MyBatis 3.2.1
次のコンストラクター シグネチャが与えられます。
public Activity(int id, String name, String color, ActivityType type,
int idOfOwnerClient) {
//validations and fields initializations
}
フィールドはオプションであるため、値SQL NULL
をint
with valueに変換しようとしています。そのため、データベースには値がある可能性があります。0
int idOfOwnerClient
NULL
anull
を のようなプリミティブ型に渡そうとするとint
、 anException
がスローされます。それを解決するために、 a を構成していTypeHandler
ます。
ここに私のスニペットがありますmybatis-config.xml
<configuration>
<typeAliases>
<typeAlias alias="intTypeHandler" type="org.apache.ibatis.type.IntegerTypeHandler"/>
</typeAliases>
</configuration>
結果マップのスニペット (最後の arg 要素の型ハンドラーに注意してください):
<resultMap type="Activity" id="activityResult">
<constructor>
<idArg column="activity.id" javaType="_int"/>
<arg column="activity.name" javaType="String"/>
<arg column="activity.color" javaType="String"/>
<arg resultMap="ActivityTypeMapper.activityTypeResult" javaType="ActivityType"/>
<arg column="activity.id_client" javaType="_int" typeHandler="intTypeHandler"/>
</constructor>
</resultMap>
しかし、junit テストを実行すると、次のエラーが表示されます (エラーnull
の最後の値に注意してください)。
org.mybatis.spring.MyBatisSystemException: nested exception is
org.apache.ibatis.reflection.ReflectionException: Error instantiating class
br.com.agrofficio.kpifarm.model.Activity with invalid types
(int,String,String,ActivityType,int,) or values
(2,Aplicação de Cal,FFFFFF,[Id: 1, Name: Plantio],null,). Cause: java.lang.IllegalArgumentException
上記のスタックトレースが示唆するように、ハンドラーが適用されていても、 のnull
代わりにまだ値を取得しています。0
私が試した解決策は成功しませんでした
1. resultmap でエイリアスの代わりにハンドラーの完全修飾名を使用します。
<arg column="activity.id_client" javaType="_int" typeHandler="org.apache.ibatis.type.IntegerTypeHandler"/>
2.にタイプ ハンドラー宣言を追加しmybatis-config.xml
ます。
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.IntegerTypeHandler"/>
</typeHandlers>
何か案は?前もって感謝します!