我正在学习休眠。我下载了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)
请帮帮我。我在那个包中搜索了这个丢失的类文件。但它不在那里。谢谢你的回答。
答案 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。晚上好!