Hibernate folgt in Verbindung mit der Bean Validierungs-API nicht den JPA-Spezifikationen?

9

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:

  • HibernateValidator als JSR-303-Implementierung
  • 2 PersistenceProvider Hibernate und EclipseLink
  • eine Entität NameNotNullWithDefaultGeneratedStrategy mit einer ID, die mit der Standardstrategie ( @Generated ) und @NotNull String name column
  • generiert wurde
  • eine weitere Entität NameNotNullWithTableGeneratedStrategy mit einer ID, die mit der Tabellenstrategie ( @TableGenerated ) und @NotNull String name column
  • generiert wurde
  • Der Test versuchen, persist eine Instanz jeder Entität mit einem Null name .
  • Die erwarteten Ergebnisse sind ein 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:

  • mit eclipse link als Provider:
    • Die Methode persist gibt für beide Entitäten javax.validation.ConstraintViolationException aus.
    • Die Transaktion wird in beiden Fällen als rollback only markiert.
  • mit Hibernate als Provider:
    • 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:

  • Ist das wirklich eine Verletzung der JPA-Spezifikationen? oder fehlt mir etwas mit dem speziellen Fall einer Tabellengenerierten Strategie?
  • falls es einen Verstoß gibt: Gibt es einen vorhandenen Fehlerbericht?

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%     
ben75 20.02.2013, 11:05
quelle

1 Antwort

3

Ich habe dafür einen Fehlerbericht eingereicht: Ссылка

    
ben75 25.02.2013, 11:10
quelle