2

プロジェクトのビルドにSpring3とHibernate4を使用しています。

私の質問は、たとえば、Userオブジェクトには、id、name、password、school、addressの5つのフィールドがあるということです。私はユーザーに学校や住所を更新/編集する権利のみを与えます。ユーザーが最初にGETを介して編集ページにアクセスするときに、フィールドにユーザーの既存の情報を入力したいと思います。

[送信]ボタンをクリックしたら、データベース内の対応する更新されたフィールドを休止状態で変更したいと思います。

Controller.java

@RequestMapping(value="/edit/{userId}", method="RequestMethod.GET")
public String toEdit(Model model,@PathVariable int userId){
    User user = userService.get(userId);
    model.addAttribute("command",user);
    return "/edit";
}

@RequestMapping(value="/save", method="RequestMethod.POST")
public String toSave(Model model){
    //how to implement this?
}

edit.jsp

<form:form action="/save" method="POST">
    <form:input path="school"/>
    <form:input path="address"/>
    <input type="submit"/>
</form:form>

私の考えでは、更新されていないフィールドを非表示フィールドとしてedit.jspページに配置して、Userオブジェクトが再バインドされたとき(フォームが送信されたとき)でも、ユーザーのID、名前、およびパスワード情報を取得できるようにすることができます。 。

私のアプローチの落とし穴は明らかです。まず、隠しフィールドとしてのパスワードは決して行く方法ではありません。次に、edit.jspページに不要な情報を追加します。

私の2番目の考えは、edit.jspの非表示フィールドとしてユーザーIDのみを配置でき、フォームが送信されたときにUser user = userService.get(command.id) 、対応するユーザーオブジェクトを取得し、フィールド(学校や住所など)を新しく入力したフィールドに設定できることです。のようなものによるものuser.setSchool(command.getSchool())。これらすべての後、ユーザーオブジェクトを更新できます。更新するフィールドがたくさんあると、コードもたくさんあるので、このアプローチはちょっと面倒です。

これを行うためのより良い方法はありますか?(必ず1つあるはずです)私はSpringとHibernateに非常に慣れていないので、非常に明白な何かが欠けている場合は、私に知らせてください。

ありがとう。

4

1 に答える 1

1

「動的更新」を使用すると、変更されたフィールドのみが更新されます。@org.hibernate.annotations.Entity動的更新用にエンティティをマークするためにを使用できます。

@Entity
@org.hibernate.annotations.Entity(
        selectBeforeUpdate = true,
        dynamicInsert = true, dynamicUpdate = true)
public class User { ... }
于 2012-04-21T05:30:04.173 に答える