【问题标题】:Dialect not getting set in hibernate方言没有在休眠状态下设置
【发布时间】:2023-03-23 20:45:01
【问题描述】:

我正在使用 Hibernate 3 和 MySQL5.5。

我是一个休眠新手,我遇到了以下异常

Exception in thread "main" org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:106)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:152)

我在 hibernate.cfg.xml 文件中设置了 Dialect 属性。我尝试了很多组合

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
<property name="DIALECT">org.hibernate.dialect.MySQL5Dialect</property>

实际的属性名称是什么? Hibernate.dialect 还是只有方言? 可能的属性值是什么?

我正在添加更多信息,我使用了

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

按照以下答案的建议。

我什至没有构建任何代码,只是试图创建简单的配置:

Configuration cfg = new Configuration().addClass(Employee.class);
sessionFactory = cfg.buildSessionFactory();

下面是实际的配置文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="connection.url">jdbc:mysql://localhost/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root1234</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>
    <!-- Mapping files will go here.... -->
  </session-factory>
</hibernate-configuration>

我怀疑没有找到 hibernate.cfg.xml ?我已将它放在 Employee.class 的源代码所在的同一个包中。事实上,在这个文件中移动会导致同样的错误,所以实际上并没有找到它:-(在哪里保存它?这是一个独立的测试程序:-(

【问题讨论】:

  • 我们需要一个精确的 Hibernate 版本。 “3” 表示从 ~2007 开始的任何内容... dialect 属性值必须是包 org.hibernate.dialect 中的任何类,您可以在您的版本的相关 javadoc 中找到可能的列表。另外,hibernate.cfg.xml 应该在你的类路径中,这可能意味着很多地方,所以我们还需要知道你正在使用的构建系统,即对于 Maven,它将是 proj/src/main/resources跨度>
  • 嗨,我正在从 Eclipse 运行一个简单的 public static void main()。
  • 嗯 3.6 有 MySQL5Dialect,所以你可能应该使用它,尽管如果你使用 InnoDB 引擎,也有一个方言。抱歉,“simple main()”现在不会说太多。我能给你的最好的答案是文件需要在你的类路径中。您可以尝试使用完整路径在 Configuraion 对象上调用 configure(File path) 方法,看看会发生什么...

标签: hibernate dialect


【解决方案1】:

我也遇到了同样的错误——org.hibernate.HibernateException: The dialect was not set。设置属性 hibernate.dialect

我忘了写 cfg=cfg.configure();在为持久性类创建实例时。现在它运行良好。

Configuration cfg=new Configuration();
              cfg=cfg.configure();
        sfactory=cfg.buildSessionFactory();

【讨论】:

    【解决方案2】:

    在我的情况下,我通过将与休眠相关的 jar 库放在 WEB-INF\lib 中来解决这个问题。

    【讨论】:

      【解决方案3】:

      问题在于配置的配置。

      配置类的configure()方法可以得到hibernate (hibernate.cfg.xml)的配置文件路径。

      告诉它路径。我想问题会解决的。

      【讨论】:

        【解决方案4】:

        我也遇到了同样的问题 早些时候我的代码是:

        private final static SessionFactory factory = new Configuration()
                .configure().buildSessionFactory();
        

        现在我把它改成了

        private final static SessionFactory factory = new Configuration()
                .configure("hibernate.cfg.xml").buildSessionFactory();
        

        错误消失了。我认为默认情况下它只查找 hibernate.properties 文件。

        【讨论】:

          【解决方案5】:

          您的第一行或第二行都应该有效。第二种方式,只有“方言”是Hibernate reference中显示的方式。如果您仍然收到该错误,则表明您可能还有其他事情发生。你是如何构建 SessionFactory 的?你确定它正在找到你的 hibernate.cfg.xml 吗?

          编辑:根据您的更新,您并没有告诉 Hibernate 从配置文件中配置自己。您正在构建自己的配置并使用它。你需要选择一个或另一个。要么做到programmatically,要么做到via XML

          【讨论】:

          • 感谢 Ryan,似乎找不到 .cfg 文件 :-( 我在问题中添加了更多详细信息。
          【解决方案6】:

          属性名称是hibernate.dialect

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

          不知道有没有类似MySQL5Dialect的东西。

          详情请咨询documentation

          【讨论】:

          猜你喜欢
          • 2018-10-21
          • 1970-01-01
          • 2015-12-07
          • 2012-12-30
          • 2015-07-26
          • 2011-07-20
          • 2020-09-01
          • 1970-01-01
          • 2017-02-28
          相关资源
          最近更新 更多