package edu.ualberta.med.biobank.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorFactory; import org.hibernate.event.EventSource; import org.hibernate.validator.engine.ConstraintValidatorFactoryImpl; /** * * * @author jferland * @see http * ://www.lunatech-research.com/archives/2008/05/09/bean-validation-java-ee * @see https://community.jboss.org/wiki/ * AccessingtheHibernateSessionwithinaConstraintValidator * @see http * ://stackoverflow.com/questions/4613055/hibernate-unique-key-validation */ public class EventSourceAwareConstraintValidatorFactory implements ConstraintValidatorFactory { private final ConstraintValidatorFactoryImpl constraintValidatorFactoryImpl; private final EventSource eventSource; public EventSourceAwareConstraintValidatorFactory(EventSource eventSource) { this.eventSource = eventSource; constraintValidatorFactoryImpl = new ConstraintValidatorFactoryImpl(); } @Override public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) { T constraintValidator = constraintValidatorFactoryImpl.getInstance(key); if (constraintValidator instanceof EventSourceAwareConstraintValidator) { ((EventSourceAwareConstraintValidator<?>) constraintValidator) .setSession(eventSource); } return constraintValidator; } }