【问题标题】:java.lang.ExceptionInInitializerError logic.HibernateUtil.<clinit>(HibernateUtil.java:16)java.lang.ExceptionInInitializerError logic.HibernateUtil.<clinit>(HibernateUtil.java:16)
【发布时间】:2017-03-18 16:42:02
【问题描述】:

我已经开始学习Hibernate,出现了这样的错误:

exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.ExceptionInInitializerError
    logic.HibernateUtil.<clinit>(HibernateUtil.java:16)
    logic.DefaultTableDAO.getItems(DefaultTableDAO.java:38)
    servlet.TestServlet.doGet(TestServlet.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:231)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:240)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
    logic.HibernateUtil.<clinit>(HibernateUtil.java:14)
    logic.DefaultTableDAO.getItems(DefaultTableDAO.java:38)
    servlet.TestServlet.doGet(TestServlet.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
    org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
    org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:257)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:231)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:240)
    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
    logic.HibernateUtil.<clinit>(HibernateUtil.java:14)
    logic.DefaultTableDAO.getItems(DefaultTableDAO.java:38)
    servlet.TestServlet.doGet(TestServlet.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我使用 Tomcat 8.5.6、Java 8、Hibernate 和 postgresql 9.5.2。 JDBC 驱动程序 9.4-1201

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:postgresql://localhost:5432/postgres?charSet=LATIN1</property>
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">java1235</property>
        <property name="connection.pool_size">1</property>

        <property name="dialect">org.hibernate.dialect.PostgreSQL9Dialect</property>

        <property name="cache.provider_class">org.hibernate.cache.internal.NoCachingRegionFactory</property>

        <property name="show_sql">true</property>


    </session-factory>
</hibernate-configuration>

HibernateUtil.java

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration().buildSessionFactory();
        } catch (Throwable e){
            throw new ExceptionInInitializerError(e);
        }

    }

    private HibernateUtil(){}



    public static SessionFactory getSessionFactory() {

        return sessionFactory;
    }
}

调用Hibernate的类

package servlet;

import logic.DefaultTable;
import logic.DefaultTableDAO;
import logic.Factory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");

        List<Integer> list = new ArrayList<>();

        list.add(1);
        list.add(1);
        list.add(1);
        list.add(1);
        list.add(1);

        Factory factory = Factory.getInstance();

        DefaultTableDAO table = factory.getItemDao();

        List<DefaultTable> items = null;
        try {
            items = table.getItems();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        req.setAttribute("listItem", list);
        req.setAttribute("str", items.get(0).getPartName());
        req.getRequestDispatcher("/WEB-INF/my_page.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("NOOOOOOOOOOOOOOOOOO");
    }
}

记录Tomcat

05-Nov-2016 15:44:39.412 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 846 ms
05-Nov-2016 15:44:46.519 INFO [http-nio-80-exec-1] org.hibernate.Version.logVersion HHH000412: Hibernate Core {5.2.4.Final}
05-Nov-2016 15:44:46.522 INFO [http-nio-80-exec-1] org.hibernate.cfg.Environment.<clinit> HHH000206: hibernate.properties not found
05-Nov-2016 15:44:46.524 INFO [http-nio-80-exec-1] org.hibernate.cfg.Environment.buildBytecodeProvider HHH000021: Bytecode provider name : javassist
05-Nov-2016 15:44:46.567 INFO [http-nio-80-exec-1] org.hibernate.annotations.common.reflection.java.JavaReflectionManager.<clinit> HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
05-Nov-2016 15:44:46.730 WARN [http-nio-80-exec-1] org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.initiateService HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
05-Nov-2016 15:44:46.733 WARN [http-nio-80-exec-1] org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
05-Nov-2016 15:46:49.454 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.core.StandardContext.reload Reloading Context with name [] has started
05-Nov-2016 15:46:49.986 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.core.StandardContext.reload Reloading Context with name [] is completed
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

【问题讨论】:

    标签: java postgresql hibernate servlets


    【解决方案1】:

    当前的错误是因为你没有正确配置hibernate.dialect,你可以在你的hibernate.cfg.xml文件中设置如下:

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

    另外,请确保使用正确的属性名称设置其他属性:

    hibernate.connection.driver_class = org.postgresql.Driver
    hibernate.connection.url = yoururl
    hibernate.connection.username = youruserid
    hibernate.connection.password = yourpwd
    hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
    

    您可以参考here

    【讨论】:

    • 我在 hibernate.cfg.xml 中写了这个,我使用注释 '@Entity' @Table@Id @Column 等
    • 在您的 xml 属性中,您缺少前缀“hibernate.”,请参阅文档
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多