2012-02-24 2 views
1

IBM DB2のTimestampデータ型ですが、java.util.Dateとしてマップする必要があるデータベースから値をロードしていますJSF GUI用ですJPAにタイムスタンプと言うだけで、それを管理すると思った。しかしDB内のタイムスタンプとEntity内のjava.util.DateがOpenJPAでロードされたときに丸めの問題を引き起こします

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "DATE") 
private Date myTimeStampAsDate; 

、データベース内の日付9999-12-31午後11時59分59秒がある場合、それは10000-01-01 00日に私のエンティティで切り上げとなります:私はそれをこのようにしました: 00

実際のjava.sql.Timestampとしてマップすると、ミリ秒単位でも完全にロードされます。この "丸め動作"を回避するために何をする必要がありますが、私のエンティティとGUIのためにjava.util.Dateを保持していますか?

+0

です。暗黙的な振る舞いがありますか?エンティティが 'java.sql.Timestamp'を使用し、JSFページが' Timestamp.getTime() '(ミリ秒を吐き出します)を呼び出すことによって新しい' Date'を作成するとどうなりますか?あるいは、タイムスタンプをフォーマットするだけでいいですか? –

+0

私はJSFに新しい日付を作成させようとしますが、この解決策は操作されたセッターを必要とすることを意味します。これは良いオプションではありません。この問題は単なるフォーマット上の問題ではありません。私はそれをデバッグし、独立したJUnitテストで動作を再確認しました。この丸めがロードされているので、別の値です!あなたの提案に感謝します。 GUIから新しい日付の動作を教えてください – jonnie119

+0

ああ、あなたのJSFはエンティティとは異なるJVM上で動作していますか?うるう秒のようなものがありますが、これはJVMの異なるバージョン/異なるバージョンで実装される場合と実装されない場合があります。 –

答えて

1

Openjpaは、java.util.Dateプロパティのデータを と注釈した場合、ミリ秒を丸めないようにするデータ辞書オプションを提供します。うまくいけば、それはバージョン2.2.1/2.3.Xと一緒に来て進行中です。それは完全に解決されるときに表示するために、このJIRA課題に従ってください:

https://issues.apache.org/jira/browse/OPENJPA-2159

プロパティは、あなたのpersistence.xmlでこのように見えるようです(デフォルトはtrueになります):

<property name="openjpa.jdbc.DBDictionary" value="roundTimeToMillisec=false" />

デフォルトはtrue

関連する問題