Hibernate 5.0.1和Java 8;找不到提供者org.hibernate.type.Java8DateTimeTypeContributor

时间:2015-09-10 05:20:55

标签: java hibernate jpa

我正在学习休眠。我下载了hibernate-release 5.0.1 Final并将所需的java和java8文件夹中的所有jar复制到我的项目中。我在我的系统中使用java8 jdk。

我正在尝试执行一个非常基本的程序:

  public class HibernateTest {      
    public static void main(String[] args){

        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("First User");


        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();

        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
        session.close();

    }
}

hibernate配置文件也非常基础:

<hibernate-configuration>                
      <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432/Training</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">password</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping class="org.vicky.dto.UserDetails"/>
      </session-factory>
</hibernate-configuration>

结果是:

Exception in thread "main" java.util.ServiceConfigurationError: org.hibernate.boot.model.TypeContributor: Provider org.hibernate.type.Java8DateTimeTypeContributor not found
    at java.util.ServiceLoader.fail(ServiceLoader.java:231)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:365)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:324)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:356)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at org.vicky.hibernate.HibernateTest.main(HibernateTest.java:19)

请帮帮我。我在那个包中搜索了这个丢失的类文件。但它不在那里。谢谢你的回答。

3 个答案:

答案 0 :(得分:1)

从构建路径库中删除java8 jar文件。

答案 1 :(得分:0)

您在类路径中缺少hibernate-java8 jar。你可以找到它here

答案 2 :(得分:0)

我刚才修好了。我在我的系统中安装了多个eclipse IDE。发现我在这个项目中使用的是使用JDK 1.7。我已将其更改为JDK 1.8,现在一切顺利(Windows-&gt; preferences-&gt; java-&gt;安装JREs-&gt;添加并指向JDK 1.8目录)。

但有人可以解释eclipse在这里的运作方式吗? 我在我的系统中安装了Java 8 RE。也许这就是为什么这个特殊的eclipse期待与Java 8相关的类,但是即使它们被添加到项目中也没有检测到它们,因为它已经安装了JRE&#34;设置指向JDK 1.7。不知道eclipse究竟发生了什么。

感谢您的回答subodh和danizmax。晚上好!