0

たとえば、10 個のフィールドを持つ Hibernate ベースのモデル オブジェクトがあります。そのうちの 6 つを Spring フォームに渡して元に戻す必要がありますが、残りの 4 つはフォームに往復する必要はありません。ただし、Hibernate オブジェクトがデータベースに保存されたときに、更新/作成するために固執する必要があります。必要がなければ、非表示フィールドとしてフォームに配置したくありません。一部のフィールドには機密データが含まれている可能性があります。

これを行う最善の方法は何ですか?オンラインで解決策を探しましたが、情報/例はかなりまばらです。

Hibernate POJO のインスタンスをリクエスト スコープの Spring Bean として作成して遊んでいますが、正しい構文を取得できないようです。

4

4 に答える 4

1

6つのフィールドのみを使用して基本的なDTOを作成してから、返された逆シリアル化されたデータを使用してエンティティを更新します。

または、休止状態のエンティティ全体をシリアル化してから、逆シリアル化してマージします。

ラウンドtruipを作成する4つのフィールドは、実際にはあまり違いがないので、実際にはあなた次第です。より可能性の高いセキュリティが懸念事項になります。

私のアプリでは、エンティティの逆シリアル化を自動化するために、いくつかの変換サービスを設定しました。

DTOは、1つのフォームで使用するために多数の異なるエンティティからのデータを提示する場合に役立ちます。

リクエストスコープのBeanを作成しないでください。それはやり過ぎです。4つの未使用のフィールドは残り、データベースに保持されるか、休止状態のcachに格納されます。

最適化する前にAPIデザインについて心配する

于 2013-03-01T13:34:56.137 に答える
1

私のアプローチは、別のフォームバッキングオブジェクトになります。の線に沿った何か

public class ModelForm {
    //required fields

    public ModelForm(Model model){
        //set the values from model
    }

    //getters and setters

    public void update(Model model){
        //set values back to the model
    }
}

public class ModelController {
    public <return-type> submit(@ModelAttribute ModelForm form) {
        Model model = loadModel(form);//Load the model object from DB using a id or some other property
        form.update(model);
        //other logic
        save(model);
    }
}
于 2013-03-01T13:30:58.573 に答える
0

UI から受け取ったプロパティでインスタンスを更新するときに DB からインスタンスをリロードする必要がないように、そのエンティティの Hibernate で第 2 レベルのキャッシュを設定するのはどうですか。

于 2013-03-01T13:18:22.937 に答える
0

モデルのすべての属性がスプリング フロント エンドに送信されない場合 (非表示のフォーム)、コストのかかる操作になる可能性がある場所 (セッション、StaticMap、データベース) に保存しない限り、データが失われます。データベースを 2 回ヒットしたくない場合は、キーをユーザーおよびオブジェクト ID として staticMap に入れ、古いオブジェクトの値を指定します。

于 2013-03-01T13:10:31.363 に答える