1

All of a sudden, my code to insert users into a database table using hibernate stopped working (and it had been working for a long time without error). The exception I get says that it cannot create the persistence unit: here is the stack trace shown below:

**-----------------------------------------------------------------------------

 javax.persistence.PersistenceException: [PersistenceUnit: craiglistPU] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:967)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at utils.JPAUtil.getEntityManagerFactory(JPAUtil.java:15)
    at dao.UserDAOImpl.insertUser(UserDAOImpl.java:38)
    at tests.MainDriver.main(MainDriver.java:21)

**-----------------------------------------------------------------------------

The root exception occurs in this file, on the line inside the 'if' statement:

public class JPAUtil {
  //name of persistence unit from persistence.xml
  private static final String PERSISTENCE_UNIT_NAME = "craiglistPU";
  private static EntityManagerFactory factory;

  public static EntityManagerFactory getEntityManagerFactory() {
       if (factory == null) {
       //line below this throws exception
       factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
      //line above this
      }
      return factory;
  }

**-------------------------------------------------------------------------------------------------------- Here is a screenshot of my datasource setup, which pings/connects correctly: working datasource setup

Finally, here is the code for my persistence.xml:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">

<persistence-unit name="craiglistPU" transaction-type="RESOURCE_LOCAL">
    <description>Persistence unit used for craigslist database</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/craigslist?useSSL=false" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="update" />   
    </properties>

</persistence-unit>

I would assume that my bean/model classes are correctly configured; I used eclipse jpa to create them and haven't modified them since creation.

Any ideas on how to fix this issue would be greatly appreciated. Also, if you would like to see any more source code, let me know and I can provide it (or allow you access to my repository). Thanks so much!

EDIT After examining the cause of the stack trace:

Caused by: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:138)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:276)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:490)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878)
... 6 more
Caused by: java.lang.NoSuchMethodError:     javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String;
at org.hibernate.validator.internal.xml.ValidationBootstrapParameters.<init>(ValidationBootstrapParameters.java:61)
at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:486)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:295)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:463)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:132)
... 9 more

I now believe this is caused by javax.validation and hibernate-validator issues. My pom includes the following dependencies:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.2.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator-annotation-processor -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>6.0.2.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.0.Final</version>
    </dependency>

Any ideas if I need to exclude anything from these dependencies, or choose different version numbers so they work correctly together? Thanks.

Connor Butch
  • 648
  • 1
  • 10
  • 28

1 Answers1

0

The NoSuchMethodError suggests there is a version mismatch. The documentation says the missing method is used in the 2.0 javax.validation.validation-api library, so maybe you have a conflicting older version loaded in your classpath? Can you check the dependency tree with maven to check for older versions of the jar being loaded?

Nicolás Marzano
  • 161
  • 2
  • 14