0

Ich möchte Spring Validation mit Anmerkungen verwenden, um meine Formulardaten zu validieren. So habe ich folgendes Objekt zum Beispiel:Spring Form Validation validiert Datenbank einfügen?

@Entity 
@ComponentScan 
public class Category { 

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

    @NotEmpty 
    private String type; 

    ... 
} 

Wie man hier sehen kann ich verwenden @NotEmpty auf das type String. Ich möchte dies nur verwenden, um mein Formular zu bestätigen. Es sollte nicht für Datenbankeinfügungen validiert werden. So

, wenn ich tun:

@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"; 
} 

Es funktioniert, wie ich es arbeiten wollen. Aber wenn ich ein Dummy-Objekt erstellen:

Category category = new Category(); 

und ich führe eine auf dem leere Objekt speichern:

this.category_repository.save(category); 

Ich erhalte den Fehler (nur wichtiger Teil davon):

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}'} 
] 

Und das ist nicht was ich will. Ich möchte die Annotation für die Formularvalidierung verwenden, aber ich möchte nicht, dass die Validierung bei Datenbankoperationen durchgeführt wird.

ist das irgendwie möglich?

Zusätzliche Informationen

hatte ich das gleiche Ergebnis mit:

javax.validation.constraints.NotNull; 

Annotation.

+0

BTW, '@ ComponentScan' Anmerkung auf der Entität seltsam aussieht. Bist du sicher, dass du es brauchst? –

+0

Nein, nicht sicher. völlig neu im Frühling. – Mulgard

+0

Wahrscheinlich können Sie es entfernen: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-scanning-autodetection –

Antwort

2

Ja, es ist möglich.

Die erste Option besteht darin, verschiedene Klassen für ein Formularobjekt (DTO) und eine Entität zu verwenden.

Die zweite Option besteht darin, Hibernate zu konfigurieren und die Überprüfung vor dem Speichern zu deaktivieren. Da diese Frage schon einige Male beantwortet, werde ich Links zu ihnen bieten:

+0

Ok, aber was ist, wenn wirklich immer nur die validieren wollen Form, nicht die Datenbank-Operationen, aber ich muss immer das gleiche Objekt verwenden? Das Projekt, an dem gerade gearbeitet wird, ist wirklich riesig und alle Zeilen im Code zu finden, wo ich die Validierung deaktivieren müsste, würde sehr lange dauern. Gibt es einen besseren Weg, nur die Formpfosten mit dem Frühling zu validieren? – Mulgard

+0

Sie deaktivieren die Validierung nicht für jede Entität, sondern nur einmal in der Ruhezustandskonfiguration. Oder Sie haben mehrere Winterschlafkonfigurationen? –

+0

oh ok. das ist eine gute Option dann. Danke – Mulgard

Verwandte Themen