1

私は、ほとんどのドメイン オブジェクトに対して次の種類の宣言を持つ Hibernate (3.3.1) マッピング ファイルでいっぱいの Java プロジェクトに取り組んでいます。

<property name="dateCreated" generated="insert">
     <column name="date_created" default="getdate()" />
</property>

ここでの問題は、getdate() が MSSQL 固有の関数であり、プロジェクトのサブセクションをテストするために H2 のようなものを使用しているときに、H2 が悲鳴を上げることです。

getdate() 

は認識された機能ではありません。独自のタイムスタンプ機能は

current_timestamp(). 

テストのために H2 を引き続き使用できるようにしたいと考えており、Hibernate に「このデータベース独自のメカニズムを使用して現在のタイムスタンプを取得する」ように指示する方法があるかどうかを知りたいと考えていました。H2では、次の解決策を思い付きました。

CREATE ALIAS getdate AS $$ java.util.Date now() { return new java.util.Date(); } $$;
CALL getdate();

それは機能しますが、明らかにH2固有です。

H2Dialect を拡張して関数 getdate() を登録しようとしましたが、Hibernate がテーブルを作成しているときに呼び出されないようです。特定のデータベース エンジンから離れてデフォルトのタイムスタンプの概念を抽象化することは可能ですか?

4

2 に答える 2

2

次のことを試していただけますか (generatedデータベースが値を生成していないため):

<column  name="DATE_CREATED" sql-type="timestamp"  default="CURRENT_TIMESTAMP"/>
于 2010-06-08T20:28:22.300 に答える
1

内でマッピングを使用してみました<timestamp><class>か?

ドキュメントはあまり明確ではありませんが、値がタイムスタンプである列をマッピングする必要があるようです。

またはを設定して、Hibernate がデータベース生成値を使用するかどうかを指定できます。generated="insert"generated="always"

于 2010-06-08T18:51:13.490 に答える