当前位置: 首页 > 知识库问答 >
问题:

JPA 2.0:在JPA 2.0中使用javax.validation.*包的异常

姜鸿畴
2023-03-14
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
 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();

共有1个答案

吴谦
2023-03-14

正如@korgen在评论中提到的,Hibernate-validator-5.x.x与validation-api-1.0.x不兼容。这是因为转移到新规范JSR-303->JSR-349。

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

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

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.3.1.Final</version>
</dependency> 
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
 类似资料:
  • 我很肯定我过去在JPA2.0中使用了某种自动检测用@Entity注释的bean的方法,但我无法弄清楚是如何实现的。如何做到这一点,而不是在persistence.XML中列出XML元素中的每个bean?

  • 我们正在从WAS 8.5(使用OpenJPA2.0,Hibernate4.2.x[last JPA2.0version])迁移到WAS 9.0(使用eclipseLink[last JPA2.1version])),除了一件事之外,迁移是成功的。 为了在服务器上多次部署同一个应用程序并针对不同的数据库运行,我们在中定义了一个变量引用: 对于WAS8.5/openJPA来说,这一切都很好。但是在使用

  • 问题内容: 我正在尝试决定是否从全面使用切换到使用,从而使提供者可移植。 1.是否支持自定义用户类型? 2.我即将实现作为二级缓存的主要目的是要具有集群功能。我可以想象,但我实际上并不知道,这也为二级缓存提供程序定义了规范。如果我是对的,可以执行吗?(如果有人可以指出我的入门知识,我将不胜感激)。 在此先感谢, Ittai 问题答案: JPA2.0是否支持自定义用户类型? 没有超越和(已经在JPA

  • 我正试图从一个联合集合中获取一个映射值,以与列表字符串进行比较。我一直有例外。 以下是我的疑问, 事实证明,在网上寻找任何JPA都是一项艰巨的任务。我找不到任何相同的东西。

  • < code>@size(max =241)用于字符串验证,如果字符串长度小于< code>112个字符,验证通过,但如果大于< code>112,则抛出异常: javax.validation。ValidationException:HV000028:期间发生意外异常 我该怎么解决呢?

  • 我想要实现的是: 验证bean支持的表单,例如使用以下类 所以,“名字”和“兴趣”来自网络表单。“name”有一些约束(NotNull),使用@Valid可以完成它应该做的事情。 “兴趣”是兴趣ID的列表。 在对“名称”进行初始验证后,我填写列表集合。 之后我想验证这个结构。“@CustomValidInterest”是一个自定义验证注释。我可以使用验证组进行两阶段验证。 问题是,如果某个“兴趣”