【问题标题】:'hibernate.dialect' must be set when no Connection available error当没有可用的连接错误时,必须设置“hibernate.dialect”
【发布时间】:2019-10-14 16:45:18
【问题描述】:

使用 Hibernate 时出现以下错误:

'hibernate.dialect' must be set when no Connection available

我正在使用数据源进行数据库连接。

【问题讨论】:

  • 通常,Hibernate 可以自动选择正确的方言,但这种失败可能有多种原因。为了帮助理解问题,提出一些问题:您使用的 Hibernate 版本是什么?什么是应用服务器?你是如何定义数据源的?您的 Hibernate 配置如何? Hibernate 是否成功获得连接?
  • 对不起。存在一些配置问题。现在没有收到上述错误。

标签: java hibernate


【解决方案1】:

问题可能是您没有为您尝试连接的数据库安装客户端库。

我有一个 Spring 应用程序,它没有 persistence.xml 文件,因此没有 hibernate.dialect 声明。

一旦我安装了MySQL Connector/J 客户端库,错误就消失了。

编辑:当数据库服务器未运行时,我也收到此错误。现在我通过 MAMP 运行 MySQL 服务器时经常发生的事情。

【讨论】:

    【解决方案2】:

    即使您的配置文件具有正确的值但您没有在代码中配置它,您也会遇到此问题。

    我在解释休眠,我忘记在buildSessionFactory() 之前使用configure(),所以我得到了错误。

    您可能需要重新检查它。

    以前的代码给我错误

    SessionFactory factory = new Configuration().buildSessionFactory();
    

    更改的代码 没有错误

    SessionFactory factory = new Configuration().configure().buildSessionFactory();
    

    【讨论】:

      【解决方案3】:

      这个错误是hibernate在告诉你尝试与数据库连接时出了什么问题的糟糕工作。

      在我的情况下,就像在配置文件中输入错误的密码一样简单。

      【讨论】:

        【解决方案4】:

        你需要设置属性

        hibernate.dialect
        

        在hibernate(persistence.xml或bean声明)配置中,值取决于你的数据库,例如:

        Postgres: org.hibernate.dialect.PostgreSQL82Dialect
        Oracle: org.hibernate.dialect.Oracle10gDialect
        

        所有可能的选项都听here

        例如,一个示例 persistence.xml 如下所示:

        <persistence-unit>
            ...
            <properties>
                ...
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                ...
            </properties>
        </persistence-unit>
        

        【讨论】:

        • 这并不完全正确。如果您知道 Hibernate 不会自动检测到它,或者您想使用自定义方言,则需要设置方言。但在大多数情况下,它应该是自动检测的,所以你不需要设置它。此消息通常表示出现其他问题。
        【解决方案5】:

        刚遇到这个问题。在我的情况下,它是 hibernate.dialect 配置。我在 Spring 上下文文件中的 SessionFatcory 配置中添加了以下内容:

        <bean id="mySessionFactory"
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="annotatedClasses">
                <list>
                    <value>com.testapp.service.geolocation.LocationData</value>
                    <value>com.testapp.service.profiles.Profile</value>
                </list>
            </property>    
             <property name="hibernateProperties">
                <value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value>
            </property>
         </bean>
        

        【讨论】:

          【解决方案6】:

          我也有这个问题。原因是&lt;bean id="sessionFactory"&gt; 定义中缺少&lt;property name="dataSource" ref="dataSource" /&gt; 元素。

          【讨论】:

            【解决方案7】:

            在某些情况下,仅使用错误的数据库名称会导致此异常。 Hibernate 显然是在做任何其他事情之前尝试确定方言,并且由于无法访问数据库,因此错误消息来自负责方言选择的部分。部分 Hibernate 出现错误消息。

            【讨论】:

              【解决方案8】:

              在 Hibernate 配置对话框中有一个选项卡“options”可以选择一些。 在这种情况下,我使用的是 Oracle Enterprise Pack for Eclipse,它已经配置了连接器,但仍然出现错误。选择列表中的一个选项就足够解决了。

              【讨论】:

                【解决方案9】:

                我有同样的错误。 我的问题是我将hibernate.properties 放在package 下,而不是src。 所以我对我的问题的解决方案是将hibernate.propertiespackage 移动到src

                【讨论】:

                  猜你喜欢
                  • 2012-05-09
                  • 2014-09-18
                  • 2015-01-04
                  • 1970-01-01
                  • 2023-03-19
                  • 2016-03-28
                  • 2014-06-29
                  • 2012-06-28
                  • 1970-01-01
                  相关资源
                  最近更新 更多