cuando intento usar bean validation con JPA usando hibernate , 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 de la validación de paquete y no tengo conocimientos de JAVA EE frijoles . cómo utilizar este paquete de validación con la entidad jpa siguiente 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();
  • Que servidor de aplicaciones que están utilizando en qué versión?
  • no hay ningún servidor de aplicaciones utilizando , implementar JPA con corejava
  • a partir de la cual jar conseguir las anotaciones (por ejemplo, @NotNull) de? ¿Tienes un jsr 303 aplicación (por ejemplo, Hibernate Validator) en el classpath?
  • tengo 2 archivo jar en mi ruta de clase 1. validation-api-1.0.0.GA.jar y 2. hibernate-validator-5.0.0.Alpha2.jar .
  • Hibernate Validator 5 implementar bean-validación 1.1 (de origen planet.jboss.org/post/…). Así que estos frascos no encajan. Usted necesita hibernar validtor 4

2 Comentarios

  1. 100

    Como @Korgen mencionado en los comentarios hibernate-validator-5.x.x no compatible con de validación-api-1.0.x. Esto es debido a la mudanza a la nueva especificación JSR-303 -> JSR-349.

    Hay dos maneras de resolver este problema:

    1. La rebaja de hibernate validator versión (que se implementa JSR-303):

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

    2. Si usted no quiere alejarse de hibernate validator 5 a hibernate validator 4 otra solución es actualizar javax.validación de la versión superior (que se describen JSR-349):

    <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    </dependency>
    • En caso de maven build hibernate validator 5 ya tiene dependencia de validación-api 1.1.0.Final. No necesita añadir de forma explícita.
    • hibernate-validador 4.3.2.Final es demasiado comptatible
    • Gracias por la información. Ayuda 🙂
    • Eres bienvenido 😉
  2. 13

    Para los que ha obtenido un error NoClassDefFoundError: javax/validation/valueextraction/ValueExtractorDeclarationException y su validación-api ya estaba javax.validation:validation-api:1.1.0.Final

    La solución fue actualizar desde javax.validation:validation-api:1.1.0.Final a javax.validation:validation-api:2.0.1.Final.

    • Usted salvó mi día

Dejar respuesta

Please enter your comment!
Please enter your name here