java hibernate 4 org.hibernate.HibernateException:找不到方言类:org.hibernate.dialect.MYSQLDialect

问题描述 投票:0回答:3

我正在学习 Java EE 和 Hibernate,我遇到了以下问题:

我在 Eclipse 中创建了一个动态 Web 项目,将其转换为 MAVEN 项目,将 mysql-connector-java 和 hibernate-core 依赖项添加到 pom.xml 中。 我添加了一个 servlet,并在 doGet 方法中尝试初始化 sessionfactory 来创建表。我正在使用 tomcat。

当我向 servlet 发出请求时,出现以下异常:

org.hibernate.HibernateException: Dialect class not found:   org.hibernate.dialect.MYSQLDialect
 org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:77)
org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:65)
org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:146)
org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:76)
org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160)
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132)
org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1818)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1776)
hu.adamsan.testhibernate.TestHibernate.doGet(TestHibernate.java:74)

pom.xml:

dependencies>
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.6.Final</version>
        </dependency>
</dependencies>

我尝试查看 Maven 依赖项,org.hibernate.dialect.MySQLDialect.class 就在那里,位置:getServletContext().getRealPath(".") ->E: Clips_jee\workspace.metadata。插件\org.eclipse.wst.server.core mp0\wtpwebapps\TestHibernateWeb\ ,在WEB-INF\lib目录下,有hibernate-core-4.2.6.Final.jar,当我用7zip打开它时,我可以在org/hibernate/dialect/MySQL5Dialect.class里面找到。

我错过了什么?我真的不知道。

doGet方法:

    PrintWriter w = response.getWriter();
    w.println("Testing hibernate<br/>");
    w.println(getServletContext().getRealPath(".")+"<br/>");

    Configuration config;
    ServiceRegistry registry;
    SessionFactory factory;     
    config = new Configuration().addAnnotatedClass(Modell.class);       
    Properties props = getProperties();     
    props.setProperty(Environment.HBM2DDL_AUTO, "create");      
    config.setProperties(props);        
    registry = new ServiceRegistryBuilder().applySettings(props).buildServiceRegistry();        
    factory = config.buildSessionFactory(registry);     
    factory.close();
eclipse hibernate maven exception jakarta-ee
3个回答
4
投票

答案就在问题里。您在 jar 文件中找到了

MySQLDialect
MySQL5Dialect
,但您的配置文件尝试使用
MYSQLDialect
。 Java 区分大小写。


2
投票

我这么说是因为上面的答案对我来说并不准确,就我而言,我正在使用 Intellij IDEA 在使用 Hibernate 依赖项时,我过度使用类型(pom 类型)配置 pom 依赖项 我的解决方案是删除那种类型。

<!--        Hibernate JPA dependency -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.3.Final</version>
        <type>pom</type>
    </dependency>

工作版本是:

<!--        Hibernate JPA dependency -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.3.Final</version>
    </dependency>

无 POM 类型

这允许利用以下错误:

java.lang.TypeNotPresentException:类型 org.hibernate.SessionFactory 不存在 这通常会阻止以下属性的解析

<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
因此,在 Spring 框架下设置 Hibernate 会话工厂时


0
投票
<!--        Hibernate JPA dependency -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.3.Final</version>
    </dependency>

使用 pom 不起作用

<type>pom</type>

© www.soinside.com 2019 - 2024. All rights reserved.