2016-09-08 1 views
0

私のアプリケーションでは、フロントエンドとバックエンドの対話にビューオブジェクトとエンティティのペアが使用されます。フロントエンドはVOのみを使用し、バックエンドはデータベースとエンティティのみを話します。また、VO < - >エンティティの変換ビューオブジェクト - >エンティティ変換中にタイムスタンプが失われる

私のエンティティクラスには、データテーブルの2つの非ヌルカラムに対応する2つのタイムスタンププロパティcreateTimestampとlastUpdateTimestampがあります。しかし、VOにはこれらの2つの特性は決してありません。

私の現在の問題:VOにはタイムスタンプのプロパティが含まれていないため、VOから変換されたエンティティは2タイムスタンプのプロパティを持つことになり、エンティティの更新を行うと、私は許可されていないnullにタイムスタンプ列を設定しようとしています。

私はこの問題をどのように処理するか知りたいです。これら2つのタイムスタンプを更新したり、エンティティを更新する前にタイムスタンプ値を取得する "エレガントな"方法はありますか?私はしばしばワンショットでエンティティのリストを更新する必要があります。私は@Columnアノテーションの下に属性「更新可能」を追加 を発見し、私の問題を解決しているようだ


ソリューション。 すなわち@Column(名前=「CREATE_STAMP」、=更新可能な、偽偽= NULL可能)

がで提供される場合を意味し、タイムスタンプ列のためのDBの列に対するデフォルト値を設定し、このポスト Creation timestamp and last update timestamp with Hibernate and MySQL

答えて

0

からヒント付きINSERTクエリ(VOを介して)はそれを受け取り、それ以外の場合はデフォルトになります。

更新:代わりにHibernateインターセプタを使用することができます。これはそのためのものです。例えば、このようなフィールドを必要とするエンティティは、以下のインタフェースを実装できます。

public interface Auditable { 
    Date getCreated(); 
    void setCreated(Date created); 
    Date getModified(); 
    void setModified(Date modified); 
} 

を次にインターセプタは常に保存時に変更されたフィールドを設定し、それがすでに設定されていない場合にのみ作成されたフィールドを設定します。

+0

これはレコードの作成には役立ちますが、UPDATEにはDBトリガーが必要なので、lastUpdateTimestampは新しい値を取得します。 –

+0

@AndrewSがポ​​イントを獲得しました。それは私を悩ますアップデートです。 – ChrisZ

+0

私はHibernateインターセプタに関するいくつかの調査をしましたが、それは解決策でもあるようです。 –

関連する問題