0

フォームデータの検証にSpring検証と注釈を併用したいと考えています。 は、だから私は、例えば以下の目的を持っている:あなたがここに見ることができるようにスプリングフォーム検証はデータベースの挿入を検証しますか?

@Entity 
@ComponentScan 
public class Category { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private long id; 

    @NotEmpty 
    private String type; 

    ... 
} 

iはtype文字列に@NotEmptyを使用しました。私はこれをフォームの検証にのみ使用したいと思っています。データベースの挿入を検証するべきではありません。

だから私が行うとき:

@RequestMapping(value = "/myForm", method = RequestMethod.POST) 
public String categoryPOST(HttpServletRequest request, Model model, @Valid Category category, BindingResult bindingResult) { 
    if (bindingResult.hasErrors()) { 
     return "form"; 
    } 

    return "redirect:/results"; 
} 

私はそれが仕事をしたいとそれは働いています。しかし、私は、ダミーのオブジェクトを作成する必要がある場合:

Category category = new Category(); 

をし、私はその空のオブジェクトに保存を実行:

Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [my.project.jpa.entity.Category] during persist time for groups [javax.validation.groups.Default, ] 
List of constraint violations:[ 
    ConstraintViolationImpl{interpolatedMessage='darf nicht leer sein', propertyPath=type, rootBeanClass=class my.project.jpa.entity.Category, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'} 
] 

this.category_repository.save(category); 

は、私は(それの唯一の重要な部分)のエラーを取得

それは私が欲しいものではありません。フォームの検証にアノテーションを使用したいのですが、データベース操作で検証を実行する必要はありません。

どういうわけかできますか?

javax.validation.constraints.NotNull; 

注釈:

追加情報は、私が使用して同じ結果を持っていました。

+0

を、 'エンティティのComponentScan' @注釈は奇妙に見えます。あなたはそれが本当に必要なのですか? –

+0

いいえ、わかりません。まったく新しい春です。 – Mulgard

+0

おそらくそれを削除することができます:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-scanning-autodetection –

答えて

2

はい、可能です。

最初のオプションは、フォームオブジェクト(DTO)とエンティティに異なるクラスを使用することです。

2番目のオプションは、保存する前にHibernateを設定し、検証を無効にすることです。この質問はすでに数回に答えているので、私はそれらへのリンクを提供します:ところで

+0

しかし、本当に常にフォームではなく、データベース操作が、私は常に同じオブジェクトを使用する必要がありますか?今作業中のプロジェクトは本当に巨大で、コード内のすべての行を確認するために、検証を無効にする必要があるのは非常に長い時間がかかります。だから、春を使ってフォーム投稿を検証するより良い方法はありますか? – Mulgard

+0

各エンティティではなく、ハイバネート設定で一度だけ検証を無効にしています。または、複数の休止状態の構成がありますか? –

+0

oh ok。それは良い選択です。ありがとうございました – Mulgard

関連する問題