2011-11-11 6 views
3

ユーザーに特定の値を更新する機会を与えるアプリケーションがあります。私はそれらの列に関する情報をユーザーに送信し、更新を受けたいと思います。特定の列を更新しないようにhibernateに指示する方法

私は自分が送信したものから作成した休止状態のエンティティを保持したいが、ユーザーがアクセスできない列は更新しない。同様に、新しいエントリを要求する場合は、自分が送信したデータを使用して、既定の列に未記載の列を設定します。

簡単な方法や使用方法がありますか?

これらの列に言及していないテーブルへの2番目のマッピングを作成しますか?

答えて

6

私はマッピングファイルにupdate = "false"というプロパティをマークすると思います。私は永続的にそれを行う方法がある場合は聞いてみたいので、私はそれらのフィールドを変更する必要がある何かを書いたら、それはそれを行うことができます。

+0

update = "false"は私のケースでは機能しません:( EDIT:autiallyそれはDB内では実際には更新されませんが、Hibernateエンティティは変更された不正なフィールドで読み込まれます。 – ITisha

1

これらの列を更新したくない場合は、それらの列の設定者を呼び出さないでください。列のセッターが呼び出されない(または新しい値で呼び出される)場合、列は更新されません。

まずエントリをHibernateでフェッチしてから、適切な列のセッターを呼び出して永続化する必要があります。そうすれば、変更したくないデータは変更されません。

+0

私はそれを行うことができると思いますが、それはやや不便です。 私はユーザーから与えられたデータを取り出し、データベースからレコードを読み込み、それらをマージするメソッドを作成し、最後にレコードを永続化する必要があります。 私はHibernateを使用していると考えています。私は簡単に降りています。私は、余分な作業であるHibernateについて言及してきましたが、余分なI/Oは必要ないと思います。 – Joe

+0

トリガを使用して変更/作成された日付のように何かがDB側で管理されている場合、そのデータをそのエンティティを再選択せずに休止状態にすることはできません。 updatable = falseのポイントは、DBを生成するフィールド値をclobberではなく、休止状態にすることです。 – hsanders

0

カラムの更新を避けるために、Hibernateでupdatable = falseを使用してください。

例:

@Column(name=CRE_TS, updatable=false) 
private Date getCreTs(){ 
    return this.creTs; 
} 
関連する問題