validator beans bean hibernate validation java-ee jpa-2.0 javabeans

hibernate - beans - JPA 2.0: Excepción para usar el paquete javax.validation.*En JPA 2.0



javax validation maven (2)

Como @Korgen mencionado en los comentarios, hibernate-validator-5.xx no es compatible con validation-api-1.0.x . Esto se debe a pasar a la nueva especificación JSR-303 -> JSR-349.

Hay dos formas de resolver este problema:

1. Degrade la versión del validador de hibernación (que implementa JSR-303):

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.1.Final</version> </dependency>

2. Si no desea retroceder desde el hibernate validator 5 para hibernar el validator 4, otra solución es actualizar javax.validation a una versión superior (que describe a JSR-349):

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>

Cuando intento usar la validación de bean con JPA usando hibernate, se produce la siguiente excepción:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: Chapter11] Unable to build EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at example.test.Test.main(Test.java:18) Caused by: org.hibernate.HibernateException: Error applying BeanValidation relational constraints at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:219) at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:126) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:306) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744) at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905) ... 5 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208) ... 10 more Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41) at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269) at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:521) at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:119) ... 15 more Caused by: java.lang.ClassNotFoundException: javax.validation.ParameterNameProvider at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 20 more

Soy nuevo en el uso del paquete de validación y no tengo conocimiento de los beans JAVA EE. cómo usar este paquete de validación con la siguiente entidad jpa es mi código:

public class Employee implements Serializable , EmployeeDetail{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private int id; @NotNull private String name; ____________________ public class Test { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("Chapter11"); EntityManager em = emf.createEntityManager(); EntityTransaction etr = em.getTransaction(); etr.begin(); ------------------ FullTimeEmployee flEmp = new FullTimeEmployee(); flEmp.setName("Harmeet Singh"); flEmp.setPension(56000); flEmp.setSalary(100000); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); validator.validate(flEmp, Employee.class); em.persist(flEmp); etr.commit();


Para aquellos que obtuvieron el error NoClassDefFoundError: javax/validation/valueextraction/ValueExtractorDeclarationException y su validación-api ya fue javax.validation:validation-api:1.1.0.Final

La solución era actualizar de javax.validation:validation-api:1.1.0.Final a javax.validation:validation-api:2.0.1.Final .