Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA 2.0 : Exception to use javax.validation.* package in JPA 2.0

when i try to using bean validation with JPA using hibernate , the follwoing exception will occur :

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 

i am new to use validation package and i have not knowledge of JAVA EE beans . how to use this validation package with jpa entity following is my code :

 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(); 
like image 405
Harmeet Singh Taara Avatar asked Feb 06 '13 13:02

Harmeet Singh Taara


People also ask

What is javax validation?

The javax. validation package contains the bean validation APIs that describe how to programmatically validate JavaBeans. ConstraintViolation is the class describing a single constraint failure. A set of ConstraintViolation classes is returned for an object validation.

What is Jsr380?

JSR 380 is a specification of the Java API for bean validation, part of Jakarta EE and JavaSE. This ensures that the properties of a bean meet specific criteria, using annotations such as @NotNull, @Min, and @Max.

What is JPA validator?

Data validation is a common task that occurs in all layers of an application, including persistence. The Java™ Persistence API (JPA) 2.0 provides support for the Bean Validation API so that data validation can be done at run time.

What is Hibernate Validator?

Hibernate Validator allows to express and validate application constraints. The default metadata source are annotations, with the ability to override and extend through the use of XML. It is not tied to a specific application tier or programming model and is available for both server and client application programming.


2 Answers

For those who got error NoClassDefFoundError: javax/validation/valueextraction/ValueExtractorDeclarationException and their validation-api was already javax.validation:validation-api:1.1.0.Final

The fix was to upgrade from javax.validation:validation-api:1.1.0.Final to javax.validation:validation-api:2.0.1.Final.

like image 21
Jan Mares Avatar answered Sep 23 '22 22:09

Jan Mares


As @Korgen mentioned in comments hibernate-validator-5.x.x isn't compatible with validation-api-1.0.x. This is because of moving to new specification JSR-303 -> JSR-349.

There are two ways to solve this issue:

1. Downgrade hibernate validator version (which is implements JSR-303):

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

2. If you don't want to move back from hibernate validator 5 to hibernate validator 4 another solution is to upgrade javax.validation to higher version (which is describe JSR-349):

<dependency>     <groupId>javax.validation</groupId>     <artifactId>validation-api</artifactId>     <version>1.1.0.Final</version> </dependency> 
like image 70
Maxim Kolesnikov Avatar answered Sep 19 '22 22:09

Maxim Kolesnikov