CSV を読み込むように設定された Spring Batch ジョブがあります。
リーダーでは、FlatFileReader を使用して各行を表す ProductCSV オブジェクトを作成します。
ライターでは、各行を実際の Object オブジェクトに変換します。このオブジェクトは、hibernate を使用して拡張 ItemWriter を使用してデータベースにマップされます。
私が持っている唯一の問題は、ENUM型のフィールドです。私が得るエラーは次のとおりです。
フィールド 'category' のオブジェクト 'target' のフィールド エラー: 拒否された値 [一部のカテゴリ]; コード [typeMismatch.target.category,typeMismatch.category,typeMismatch.com.project.enums.ProductCategory,typeMismatch]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [target.category,category]; 引数 []; デフォルトのメッセージ [カテゴリ]]; デフォルト メッセージ [タイプ 'java.lang.String' のプロパティ値をプロパティ 'category' の必要なタイプ 'com.project.enums.ProductCategory' に変換できませんでした。ネストされた例外は java.lang.IllegalStateException: タイプ [java.lang.String] の値をプロパティ 'category' の必要なタイプ [com.project.ProductCategory] に変換できません: 一致するエディターまたは変換戦略が見つかりません]
ENUM は次のようになります。
package com.project.enums;
public enum ProductCategory
{
SomeCategory( "Some Category" ),
AnotherCategory( "Another Category" );
final String display;
private ProductCategory( String display )
{
this.display = display;
}
@Override
public String toString()
{
return display;
}
}
ProductCSV オブジェクトは次のようになります。
package com.project.LoadSavingInfo;
import com.project.enums.ProductCategory;
public class ProductCSV
{
private ProductCategory category;
public ProductCategory getCategory()
{
return this.category;
}
public void setCategory( ProductCategory category )
{
this.category = category;
}
}
実際のオブジェクトは次のようになります。
package com.project;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;
import com.project.enums.ProductCategory;
@Entity
@Table( name = "product" )
public class Product
{
@Column( nullable = false )
@Enumerated(EnumType.STRING)
private ProductCategory category;
public ProductCategory getCategory()
{
return category;
}
public void setCategory( ProductCategory category )
{
this.category = category;
}
}
では、CSV から "Some Category" のようなものを読み込む場合、これを ENUM 型に変換するにはどうすればよいでしょうか? ヘルプやアドバイスは大歓迎です。さらに情報が必要な場合は、お問い合わせください。