4

Spring MVC 3、Hibernate、およびPostgresQLを使用してユーザーを登録したいと思います。送信したいフォームは次のとおりです。

<form:form name="registerForm" method="post"
        action="registerNewUser.html" commandName="user">

        <table>

            <tr>
                <td><spring:message code="label.userName" /></td>
                <td><form:input path="userName" /></td>
                <td><form:errors path="userName" cssClass="error" /></td>
            </tr>

            <tr>
                <td><spring:message code="label.password" /></td>
                <td><form:password path="password" /></td>
                <td><form:errors path="password" cssClass="error" /></td>
            </tr>


            <tr>
                <td><spring:message code="label.password" /></td>
                <td><form:password path="retypePassword" /></td>
                <td><form:errors path="retypePassword" cssClass="error" /></td>
            </tr>

            <tr>
                <td colspan="2"><input type="submit"
                    value="<spring:message code="register.label" />" /></td>
            </tr>
        </table>

    </form:form>

これが私が保存したいPOJOです:

@Entity
@Table(name = "user_table")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "user_name", nullable = false, length = 50)
    private String userName;

    @Column(name = "password", nullable = false, length = 50)
    private String password;

    private String retypePassword;
        // getters setters

コントローラーの関連部分は次のとおりです。

@RequestMapping(value = "/registerNewUser", method = RequestMethod.POST)
public String saveNewUser(@ModelAttribute User user, BindingResult result, Model model, HttpSession session) {

    UserValidator validator = new UserValidator();
    validator.validateUser(user, result, userService.existingUser(user));
    String ret = REGISTER_USER;
    if (!result.hasErrors()) {
        user.setPassword(PasswordEncripter.md5(user.getPassword()));
        userService.save(user);
        ret = goToPractice(user, model, session);
    }
    return ret;
}

retypePasswordの値をDBに格納するのは無駄だと思うので、そのための列を作成しませんでした。フォームを送信したときに、以下の例外が発生しました。

org.postgresql.util.PSQLException: ERROR: column user0_.retypepassword does not exist

テーブルに「retypePassword」列を追加することでこの例外を簡単に修正できますが、それでも無駄だと感じています。DBに重複データを追加せずに問題を修正する賢い方法はありますか?

4

1 に答える 1

13

エンティティの retypePassword を でマークできます。これにより@Transient、hibernate がテーブルに列を作成しないように指示されますが、この pojo を使用して検証目的で spring mvc にバインドできます。

@Entity
@Table(name = "user_table")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "user_name", nullable = false, length = 50)
    private String userName;

    @Column(name = "password", nullable = false, length = 50)
    private String password;

    @Transient
    private String retypePassword;
        // getters setters
于 2012-10-04T07:49:28.433 に答える