See inline...
On Fri 22 Feb 2013 02:38:32 PM CST, Hardy Ferentschik wrote:
On 22 Jan 2013, at 9:17 PM, Steve Ebersole <steve(a)hibernate.org> wrote:
> Kind of. What I mean is that the HEM integration code is allowing Set
<ValidationMode>. So our impl allows a value like "auto, ddl" or other
combos. I am not able to grok why we allow multiples.
I think this is a Hibernate specific "feature" to support also ddl generation.
The idea is to say something like "callback,ddl" to enable validation and
application of DDL constraints.
Emmanuel might know more. With JPA 2.1 and the DDL stuff part of the spec I would assume
there are are other explicit options to enable/disable these features.
Ok, for some reason I thought DDL-based validation was a JPA option as
well. But you are correct, it isnt. However, I still do not see the
benefit of allowing multiple selections simultaneously. is it really
such a great idea to allow callback *and* ddl in combination? We
already throw exceptions on other combinations.
Also, JPA 2.1 says nothing about DDL-based validation.
> Also auto and callback are slightly different. callback causes
an error if no bv provider is available whereas auto then skips validation.
Hmm, seems wrong indeed, but maybe that's the difference in the end. Looking at
"3.6.1.1 Enabling Automatic Validation" of the spec for the auto mode it is not
explicitly mentioned
that an exception should be thrown whereas for callback it is. Whether this is
international or just badly written I don't know. Maybe something to clarify in the
spec.
Don't we have someone in the JPA expert group ;-)
Quoting part of 3.6.1.1:
<quote>
If the auto validation mode is specified by the validation-mode element
or the javax.persis-
tence.validation.mode property, or if neither the validation-mode
element nor the
javax.persistence.validation.mode property is specified, and a Bean
Validation provider
is present in the environment, the persistence provider must perform
the automatic validation of entities
as described in section 3.6.1.2. If no Bean Validation provider is
present in the environment, no lifecy-
cle event validation takes place.
</quote>
The first part of that first sentence is an overly complex grammatic
structure (imo) which is maybe why you missed it. But essentially the
sentence says that in AUTO validation mode (either explicit or implicit
due to no explicit value):
a) if "a Bean Validation provider
is present in the environment, the persistence provider must perform
the automatic validation of entities
as described in section 3.6.1.2"
b) If no Bean Validation provider is present in the environment, no
lifecy-
cle event validation takes place.
Again that is the auto case.
And then:
<quote>
If the callback validation mode is specified by the validation-mode
element or the javax.per-
sistence.validation.mode property, the persistence provider must
perform the lifecycle event
validation as described in section 3.6.1.2. It is an error if there is
no Bean Validation provider present in
the environment, and the provider must throw the PersistenceException
if the javax.per-
sistence.validation.mode property value "callback" has been passed to
the Persis-
tence.createEntityManagerFactory method
</quote>
So the only difference between CALLBACK and AUTO is in how they handle
Bean Validation provider "being not present".