1

Hibernate 3.x、MySQL4.1.20とJava1.6を使用しています。HibernateタイムスタンプをMySQLタイムスタンプにマッピングしています。ここまでは順調ですね。問題は、MySQLがTIMESTAMPを秒単位で保存し、ミリ秒を破棄することです。ミリ秒の精度が必要になります。テーブルでTIMESTAMPの代わりにBIGINTを使用して、Javaコードで型を変換できると思います。HSQLやSQLクエリで日付関数を引き続き使用できるように、hibernate、mysql、JDBC、またはいくつかの組み合わせを使用してこれを行うためのより良い方法があるかどうかを調べようとしていますか?

4

4 に答える 4

1

この問題にまだ関心がある方へ: MySQL 5.6.4 は精度の高いタイムスタンプをサポートしています。MySQL5Dialect をサブクラス化して、使用されている MySQL タイプをオーバーライドすると、問題が解決します。

于 2014-03-23T21:49:19.510 に答える
0

TIMESTAMPフィールドに加えて使用してみませんか?ミリ秒なしで日付を格納するための1つのフィールド(すでに定義されている)と、ミリ秒のための別のフィールドがあります。ミリ秒を適切に格納するように注意する必要がある場合を除いて、最初のフィールドでHSQLクエリを実行できます(Hibernateを使用して格納する前にJava Dateオブジェクトを解析することにより)。

于 2008-12-15T19:39:50.977 に答える
0

データ型をタイムスタンプから 10 進数 (17,3) に変更し、いくつかのヘルパー メソッドを作成しました。

public static Calendar bigDec2Cal(BigDecimal tsp) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(tsp.longValue());
    return cal;
}

public static Date bigDec2Date(BigDecimal tsp) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(tsp.longValue());
    return cal.getTime();
}

public static BigDecimal cal2BigDec(Calendar cal) {
    BigDecimal tsp = new BigDecimal(cal.getTimeInMillis());
    return tsp;
}

public static BigDecimal date2BigDec(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    BigDecimal tsp = new BigDecimal(cal.getTimeInMillis());
    return tsp;
}
于 2010-08-11T23:12:58.000 に答える