7

OpenCSV を使用して CSV ファイルを解析し、その値をCsvToBeanクラスを使用してモデル オブジェクト (OpenJPA エンティティ Bean) に直接バインドします。

ただし、問題は - CSV には (明らかに) として解析される値がいくつかありますがStrings、プロパティに設定する必要があるDateため、基本的に CsvToBean クラスは書き込みメソッドを動的に呼び出そうとしているときに終了します (つまり、Date プロパティを設定しようとします)。生の文字列値で)。

OpenCSV 内に、各列をどのタイプにマップするかを指定できる機能はありますか? そうでない場合、これを容易にするためにどのクラスを拡張/再実装するかについての提案はありますか? ディレクトリの下の OpenCSV ソース配布で利用可能な他の戦略を調べ/test/au/com/bytecode/opencsv/bean/ても、結論には近づきませんでした。

プロパティセッターをいじって、引数として渡される型を取得し、渡された値がまだない場合は解析しようとするジェネリックメソッドにすることができると思いますが、....永続性を使用していますOpenJPA Enhancer が突然ジェネリック セッターを嫌ったため、この「セッター ハック」が私たちの足を引っ張ったことを後で知りたいとは思いません。DateDateDate

私はこれについて数時間頭を悩ませてきました-おそらくリフレクションを使用して独自のBeanバインディングロジックを作成することで問題を解決できたはずですが、車輪の再発明は嫌いで、これができると感じています/希望を持っています既存の OpenCSV フレームワーク内で簡単に実行できます。

必要に応じてコードを投稿することもできますが、実際にはそれほど多くはありません。

何かご意見は?どうも。

4

3 に答える 3

5

クラス定義で Date プロパティのコピーを作成するのはどうですか? BeanUtils を使用して同様のことを行いました

したがって、Bean クラスには次が含まれます

String dateString;
Date date;

public void setDateString(String dateString) {
     // This method can parse the dateString and set date object as well
}

public void setDate(Date date) {
     // Use this for JPA
}
于 2011-04-30T16:03:53.717 に答える
2

または、その列のParseDateプロセッサを使用して Bean を (変更なしで) 読み取ることができるセル プロセッサAPI を備えたSuper CSVを使用することもできます。

于 2012-12-12T21:59:25.000 に答える
1

おそらく、元のメソッドと一緒に一時的なセッターメソッドが機能するでしょう:

@Transient
public void setDate(String date) {
   Date d = parseDate(date);
   setDate(d);
}

@Column
public void setDate(Date date) {
  this.date = date;
}
于 2011-04-30T15:59:20.057 に答える