2009-08-19 9 views
3

私はデフォルト値(フィールドはnullにはできません、私はテーブル構造を変更することはできません)として0( "0000-00-00")を持つ日付フィールドを持つMySqlテーブルを持っています。 Hibernateはゼロの日付が気に入らず、読み込み中または保存中に例外をスローします。Hibernateでゼロの日付( "0000-00-00")を扱うには?

私は、レコードを取得している間に0の日付をnullに変換するMySql接続設定 "zeroDateTimeBehavior = convertToNull"を設定してレコードを読み取らせることができました。 nullの日付を持つレコードを保存しようとするまでは正常に動作しています。日付がnullにはならないという例外がスローされます。

だから、問題は - 日付がテーブルにゼロとして表示されるように、Hibernateを通してレコードを保存する方法ですか?

ありがとうございました。

+2

どうしてそれらを処理したいのですか?ゼロデイ - そこに出てイエスの誕生日を祝う!あなたはなぜこのような重大な機会にあなたのコンピュータの前にいるのですか?

+0

ユリウス暦とグレゴリオ暦でゼロ年は存在しません。紀元前1年から1年にまっすぐにジャンプします。私は本当にこのためにHibernateを責めることはできません。 –

+0

年が有効だったとしても、月と日の数字はゼロになりません。 –

答えて

1

私は、Hibernateインターセプタ(APIDoc)を追加し、onSave()メソッドで何かを実装しようとします。

次のコードが動作することがあります。

static final Date ZERO_DATE = //0000-00-00 

public boolean onSave(Object entity, 
        Serializable id, 
        Object[] state, 
        String[] propertyNames, 
        Type[] types) 
      throws CallbackException { 
    for(int i = 0; i< propertyNames.length; i++) { 
     if(propertyNames[i].equals("dateFieldName") && state[i]==null) { 
      state[i] = ZERO_DATE; 
      return; //or may continue, if there are several such fields. 
     } 
    } 
} 
+0

ZERO_DATEとは何ですか? – serg

+0

ちょうど0の日付フィールドのjava represntation。 –

+0

あなたはそれがどのように見えるかを教えてもらえますか? javaにはすべてのゼロを持つ日付のようなものはありません。そのため、日付がゼロの問題があります。 – serg

関連する問題