0

私は、とりわけ日付をパラメータとして受け入れ、日付を返すOracle関数を持っています。関数は次のようになります。

FUNCTION my_func(par1 IN DATE, par2 IN NUMERIC) RETURN DATE AS
ret_val DATE;
BEGIN
....
END;

Java アプリケーションでこの関数を呼び出す必要があり、現在 JPQL で実行しています。コードは JBoss 5 で実行される Web アプリケーション用で、次のようになります。

   Query q = entityMng.createNativeQuery("SELECT MY_FUNC(?1,?2) FROM DUAL");
   java.util.Date now = new Date();
   long param2 = 110L;
   q.setParameter(1, now);
   q.setParameter(2, param2);
   java.sql.Date retSql = null;
   Object obj = q.getSingleResult();
   if (obj != null) {
      retSql = (java.sql.Date) obj;
   }

コードを実行した後、retSql変数には正しい日付が含まれていますが、時間は =00.00.000です。の型として、 とはjava.util.Date対照的にを使用しても同じ動作が得られます。java.sql.DateretSql

この問題を調査しているときに、この SO 投稿How to convert an Oracle Date field into java.util.Date through JPAに出くわしましたが、私の場合は "addScalar" の使用方法がわかりません。

事前に感謝します。

4

2 に答える 2

2

DATEではなく、関数でTIMESTAMPを返してみてください。DATEはOracleでは日付のみになり、TIMESTAMPは日付/時刻に使用されると想定されています。これを制御するためにJDBCに設定できる下位互換性フラグがあります。

どのJPAプロバイダーを使用していますか?EclipseLinkはこれを自動的に処理する必要があります。

于 2012-04-23T15:23:18.520 に答える
0

XMLAdapterの使用についてはどうですか。

パブリッククラスDateAdapterはXmlAdapterを拡張します{

// the desired format
private String pattern = "yyyy-MM-dd HH:mm:ss";

    /*few more formats http://www.xyzws.com/javafaq/how-to-use-simpledateformat-class-formating-parsing-date-and-time/142    */

public String marshal(Date date) throws Exception {

    return new SimpleDateFormat(pattern).format(date);

}

public Date unmarshal(String dateString) throws Exception {


    return new SimpleDateFormat(pattern).parse(dateString);

}

そしてそれをあなたのエンティティに追加します。例えば

private java.util.Date originDate;

@XmlJavaTypeAdapter(DateAdapter.class)
@Column(name = "ORIGIN_DATE", nullable = true)
@XmlElement(namespace = "my-namespace")
public Date getOriginDate() {
    return this.originDate;
}

これは私がこれについて学んだために使用したチュートリアルです。 http://weblogs.java.net/blog/kohsuke/archive/2005/04/xmladapter_in_j.html

于 2012-05-01T12:07:46.960 に答える