JPA 2.0:在JPA 2.0中使用javax.validation。*包的例外 [英] JPA 2.0 : Exception to use javax.validation.* package in JPA 2.0

查看:132
本文介绍了JPA 2.0:在JPA 2.0中使用javax.validation。*包的例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试使用使用hibernate的JPA进行bean验证时,会发生以下异常:

 线程中的异常main javax.persistence.PersistenceException:[PersistenceUnit:Chapter11]无法在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)$ or $ $ b org.hibernate.ejb.Ejb3Configuration上创建EntityManagerFactory 
。 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)

引起:org.hibernate .HibernateException:应用BeanValidation关系约束时出错在org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationInte
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

导致:java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)
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
Cau sed by:java.lang.NoClassDefFoundError:javax / validation / ParameterNameProvider $ b $在org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)$ b $在javax.validation.Validation $ GenericBootstrapImpl.configure( Validation.java:269)
在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

导致: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方法)
在java.net.URLClassLoader.findClass(未知源)$ b $在java.lang.ClassLoader.loadClass(未知源)
在sun.misc.Launcher $ AppClassLoa der.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 20 more

我新使用验证软件包,并且我还没有掌握JAVA EE bean的知识。

  public class Employee实现Serializable,EmployeeDetail {


private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@NotNull
私人字符串名称;
____________________

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();


解决方案

validation-api-1.0.x 不兼容。这是因为转向新的规范JSR-303 - > JSR-349。

有两种方法可以解决这个问题:

1。降级hibernate验证器版本(实现JSR-303):

 <依赖性> 
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-validator< / artifactId>
< version> 4.3.1.Final< / version>
< /依赖关系>

2。如果您不想从hibernate验证器5到hibernate验证器4另一个解决方案是将javax.validation升级到更高版本(这是描述JSR-349):

 < ;依赖性> 
< groupId> javax.validation< / groupId>
< artifactId> validation-api< / artifactId>
< version> 1.1.0.Final< / version>
< /依赖关系>


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();

解决方案

As @Korgen mentioned in comments hibernate-validator-5.x.x doesn'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>

这篇关于JPA 2.0:在JPA 2.0中使用javax.validation。*包的例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆