Diese Frage ist eine Folge dieser: JPA ConstraintViolation vs Rollback
Ich habe einen Test über die Kombination von JPA und Validierungs-API (JSR-303) durchgeführt.
Ich habe Folgendes in JPA-Spezifikationen (Seite 101-102):
Standardmäßig wird die Standard-Bean-Validierungsgruppe (die Gruppe "Standard") bei den Validierungsvorgängen für die Präpersistenz- und Voraktualisierungsvalidierung validiert
...
Wenn die von der validate-Methode zurückgegebenen ConstraintViolation-Objekte nicht leer sind, muss der Persistenzanbieter die javax.validation.ConstraintViolationException mit einem Verweis auf die zurückgegebene ConstraintViolation-Objektgruppe auslösen und die Transaktion für das Rollback markieren.
Ich habe den folgenden Test eingerichtet:
NameNotNullWithDefaultGeneratedStrategy
mit einer ID, die mit der Standardstrategie ( @Generated
) und @NotNull String name
column NameNotNullWithTableGeneratedStrategy
mit einer ID, die mit der Tabellenstrategie ( @TableGenerated
) und @NotNull String name
column persist
eine Instanz jeder Entität mit einem Null name
. javax.validation.ConstraintViolationException
, ausgelöst durch die Persist-Methode und die Transaktion markiert als rollback only
(d. h. diese Annahmen basieren auf der in diesem Beitrag zitierten JPA-Spezifikation). Die Ergebnisse sind:
persist
gibt für beide Entitäten javax.validation.ConstraintViolationException
aus. rollback only
markiert. persist
gibt eine javax.validation.ConstraintViolationException
für die Entität NameNotNullWithDefaultGeneratedStrategy
+ Transaktion aus, die als rollback only
markiert ist.
persist
wirft keine Ausnahme für Entität NameNotNullWithTableGeneratedStrategy
+ Transaktion nicht markiert als rollback only
commit
für NameNotNullWithTableGeneratedStrategy
schlägt fehl mit RollbackException
Die Fragen sind:
Hier ist der Code für meinen Test:
%Vor%Die Entitäten
Standardstrategie
%Vor%Tabellenstatus:
%Vor%Die Datei persistence.xml
%Vor%Die pom.xml
%Vor%Tags und Links java jpa hibernate eclipselink bean-validation