Jeremy, Thanks for the explanation. Maybe you could also explain this sentence from the spec:
"Validation can also be achieved by the application calling the validate method of a validator instance upon an instance of a managed class, as described in the Bean Validation specification [8]" Does it mean we can call validate at whatever time in the persistence context? Can we access entity manager then? Greetings, Milosz > David & Milosz, > > Based on the information provided, I do not think Bean Validation would > provide a good solution for this problem. Used within the context of JPA, > bean validation gets called when various lifecycle events occur; > pre-persist, pre-remove, pre-update. In order to create a custom validation > constraint, you'd likely need to invoke some database operations (likely > some variant of the query Craig suggested). Regarding the use of em & query > operations inside lifecycle events JPA specification states: > > > In general, the lifecycle method of a portable application should not invoke > EntityManager > or Query operations, access other entity instances, or modify relationships > within the > same persistence context.[38] A lifecycle callback method may modify the > non-relationship > state of the entity on which it is invoked. > > > So using database operations, at least within the same persistence context, > probably isn't a good idea. Regardless, I think the net result would be > that, application-wise, you'd be back in the nearly same situation as > present. The exception would still occur on the persist, the main > difference would be that the exception would be coming from the validator > instead of the failed database operation. > > -Jeremy > > On Sat, Jun 20, 2009 at 3:30 AM, Miłosz Tylenda wrote: > > > David, > > > > Apart from what Craig has suggested, what came to my mind is that there is > > an ongoing effort to implement JSR-303 Bean Validation in OpenJPA 2.0. Not > > sure however, whether it is sufficiently implemented yet and it can be used > > for your purpose. Might be worth checking though. > > > > Cheers, > > Milosz > > > > > I realise that this is not strickly an OpenJPA problem, rather a more > > > general JPA one, but there are experts here who might know the answer. > > > > > > I have a number of classes which represent tables which have not only > > > an Id field, but also various other fields which are marked as unique. > > > > > > When I persist and then try to flush a new object which has a non-unique > > > value in the object (the user entered bad data) it breaks the transaction > > > and throws an error. All of which is quite understandable. > > > > > > The question is what is the best way to avoid it. Do I have to build the > > > checking into the application, or is there a more generic way which I > > > can use as a validation technique before I try to persist the object. > > > > > > David > > > > > >
