Can you eloborate on what you mean by
Quote:
cannot rely on the method validate() of persistent classes that implement Validatable
.
Validatable is pretty limited in scope. You are not allowed to access the underlying session in any way during Validatable.validate(); this includes causing lazy associations to load. Thus validatable is good for things like null checks and simple attribute value checks. In general, it is advisable to not even attempt to read across associations of any type in that validate method.
You could utilize Interceptor for some more advanced validations (I use this approach currently passing the entities off to a validation framework). I have been using this approach for about 9 months, and what I've found is that it is somewhat limiting to perform this at thie level of the app; specifically talking about business validations.
If you go this route of tieing validations to you data acess, I would highly recommend partitioning you validation checks into (a) data checks and (b) business checks. Data checks would be things like a field can never be null, or a start date has to be before an end date; things which are *ALWAYS* true. I made the mistake initially of tieing all my validations here, including business checks, and am regretting it (and changing it).