2017-05-11 7 views
0

に永続化することができない私はLocalDate.MAXを保持しようとすると、私は次の例外を取得しています:LocalDate.MAXがOracle DB

org.springframework.dao.InvalidDataAccessApiUsageException: Invalid year value; nested exception is java.lang.IllegalArgumentException: Invalid year value 

LocalDate.MAXの定義は次のとおりです。Year.MAX_VALUEに対し

public static final LocalDate MAX = LocalDate.of(Year.MAX_VALUE, 12, 31); 

です:

public static final int MAX_VALUE = 999_999_999; 

サイドノートとして、H2に問題はありません

なぜそれはそうですか?

動作させるための回避策はありますか?

+0

これは典型的な挿入文です。 HibernateのBasicBinderログ:JavaオブジェクトのLocalDate = + 999999999-12-31の[DATE] - [628-12-09]というバインディングパラメータ[9] ..それは異常です –

答えて

1

Oracle docsは、Oracleの日付タイプが9999までの年を受け入れると言います。This questionもこのトピックを扱います。

これらの日付を数値(ミリ秒)として保存することで回避できますか?

日付をテキストとして保存して解析することもできますが、オーバーヘッドが増え、クエリで比較するのが難しくなります。

代わりに、いくつかのUtilクラスで独自のMaxDateを作成することもできます。

+0

私は個人的な静的final LocalDate NEVERENDING = LocalDate.ofを使用しました9999、Month.DECEMBER、31)すべての後に –

+0

@PatrikMihalčinはい、それは最も単純な修正であり、どのソフトウェアでも十分長く働くはずです。 y10kのバグを想像するのは面白いでしょうが、世界中のOracleデータベースを襲っています; D –