JPA Entité de Validation
Ok, je vais essayer d'installation d'une application dans un Conteneur Java EE. J'utilise JPA pour la persistance et j'ai aussi utiliser le javax.validation.constraints.*
contraintes. Par défaut, le conteneur de valider les entités au cours de la @PrePersist
et @PreUpdate
événements de cycle de vie et c'est bon pour moi, mais comment dois-je traiter la ConstraintViolationException
?
Je ne trouve pas de docs sur elle, toute suggestion est la bienvenue.
OriginalL'auteur s.susini | 2010-07-23
Vous devez vous connecter pour publier un commentaire.
Eh bien, vous pourriez attraper 🙂 Voici un exemple (à partir d'une unité de test):
Où mon Client ressemble:
Mais c'était juste un exemple pour montrer qu'une infime partie de l'API.
À mon avis, vous devriez vraiment gérer la validation au niveau de la vue. De nombreux frameworks de présentation de soutien Bean Validation: JSF 2.0, Wicket, Spring MVC...
Voir aussi
Si vous êtes dans une transaction,
ConstraintViolation
peut arriver à tout moment (plus précisément, à FlushTime) à l'intérieur de la transaction-qui se passe généralement lorsque vous lisez après l'écriture dans l'EMR. Si votre code PAS de travail.assert
s dans le bloc catch, sans explicitement exiger laConstraintViolationException
n'importe où, semble être une mauvaise idée à mon humble avis.Tout d'abord, comme je l'ai écrit, c'était un exemple pris à partir d'une unité de test pour montrer l'API. Deuxièmement, ce code travailler dans le test qu'il a été pris à partir de (mes tests méthodes sont en cours d'exécution à l'intérieur d'une transaction). Troisièmement, il est
fail()
dans mon test, le test échouera si l'exception n'est levée. Donc je vous remercie pour vos critiques, mais ils n'ont pas de sens pour moi, et si vous avez une meilleure solution, n'hésitez pas à le poster.Désolé, incontournable de la
fail()
ligne. Mais mon autre commentaire tient toujours:ConstraintViolationException
peut arriver n'importe quand entre votre "insérer/mettre à jour" et votreflush()
/commit()
. Ok, dans votre réponse, vousflush()
explicitement, mais le rinçage après chaque insertion est inefficace, ne parle pas des mises à jour implicites (lorsque vousfind()
, puis de définir certaines propriétés)OriginalL'auteur Pascal Thivent
Vous pouvez attraper
ConstraintViolationException
, comme Pascal décrit, mais s'il vous plaît être conscient que cette Exception peut être levée à tout moment après votre création/mise à jour de la déclaration, et avant la fin de la transaction (voir FlushModeType). Typique de jeter points sont quand vous lisez quelque chose après votre création/mise à jour de la déclaration, ou à un expliciteflush()
déclaration (que vous devriez utiliser avec prudence).OriginalL'auteur pihentagy