entityManager.persist not throwing ConstraintValidationException

Description

While trying to persist an entity with:

  • an id generated with strategy GenerationType.TABLE

  • a field annotated with @javax.validation.constraints.NotNull

  • a null value for that field

I was expecting that:

  • the entityManager.persist() throws a javax.validation.ConstraintViolationException

  • the transaction to be marked as rollback-only
    (Those expectations are based on jpa 2.0 specifications)

But the current behavior is:

  • entityManager.persist() don't throw any exception

  • transaction is not marked as rollback only

  • later, the transaction.commit() throws a RollbackException

Remarks:

Environment

Hibenate 4.2.0-RC1
HibernateValidator 4.3.1.Final
H2 in memory database 1.3.170

Activity

Show:
harsha puthalapattu
November 4, 2013, 9:23 PM

Same issue happens even when the id is generated with jpa- sequence generator. However, works fine when @GeneratedValue(strategy=GenerationType.IDENTITY) and @GeneratedValue(strategy=GenerationType.AUTO) are used.

I wonder if it is something wrong with our code. Any help would be greatly appreciated.

Hardy Ferentschik
February 14, 2014, 1:20 PM

The problem is that em.persist is not calling the pre-persist callbacks. Hibernate delays the execution of these callbacks until em.flush() is called. Even though this might sound counterintuative initially, it makes more sense if you think about whole object graphs and cascading operations. Flush is when Hibernate ORM identifies all the entities that have been changed and need database actions.

Regarding the spec, it is vague enough in this regards to allow for this behaviour.

Hardy Ferentschik
February 14, 2014, 4:47 PM
Brett Meyer
March 7, 2014, 5:31 PM

Bulk closing rejected tickets in "resolved" state.

Won't Fix

Assignee

Unassigned

Reporter

BenoitM

Fix versions

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

Priority

Major
Configure