【发布时间】: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)方法,看看会发生什么...