0

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 型に変換するにはどうすればよいでしょうか? ヘルプやアドバイスは大歓迎です。さらに情報が必要な場合は、お問い合わせください。

4

1 に答える 1