2
<hibernate-configuration>
<session-factory>  <property name="hibernate.connection.driver_class">

com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">

jdbc:mysql://localhost/products</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password"></property>
  <property name="hibernate.connection.pool_size">10</property>
  <property name="show_sql">true</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.hbm2ddl.auto">update</property>
  <!-- Mapping files -->
  <mapping resource="prod.hbm.xml"/>
</session-factory>
</hibernate-configuration>

我使用上面的 XML 作为休眠配置文件,将一些数据插入到名为“Products”的数据库中。但它显示一个编译错误:Connection cannot be null when 'hibernate.dialect' not set 我不知道为什么/如何修复。你们中的一些人能给我一些继续前进的想法吗?我很感激。谢谢你。

[更新]

我想我应该包括我创建和设置我的简单项目的步骤,我想这可能是原因

我已经在 mysql 中有数据库和表;然后我创建了一个空的 java 项目,我添加了源文件(java 扩展),然后我添加了 2 个 xml 文件(hibernate.cfg.xml 和 prod.hbm.xml)。然后我只是编译希望我能运行。

这是我在尝试将我的应用程序作为 java 应用程序运行后从命令提示符得到的消息

Jul 13, 2012 12:32:55 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
Jul 13, 2012 12:32:55 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.2.Final}
Jul 13, 2012 12:32:55 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Jul 13, 2012 12:32:55 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Jul 13, 2012 12:32:56 PM org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
Connection cannot be null when 'hibernate.dialect' not set
4

6 回答 6

2

它应该是

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
于 2012-07-13T04:50:43.597 回答
2

我怀疑您的配置文件很好,并且错误出在您用于创建 SessionFactory 的代码中。他们在 Hiberanate 4 中搞砸了这个,这引起了无数的混乱。

这对我有用:

private static SessionFactory sessionFactory;

public static SessionFactory getSessionFactory()
{
   if (sessionFactory == null)
   {
      Configuration configuration = new Configuration();

      ServiceRegistry serviceRegistry = new
              ServiceRegistryBuilder().applySettings
              (configuration.configure().getProperties()).buildServiceRegistry();        

      sessionFactory = configuration.buildSessionFactory(serviceRegistry);
   }
   return sessionFactory;

}

我和你有同样的错误,我意识到我在定义 serviceRegistry 的那一行丑陋的代码中错过了对 configuration.configure() 的重要调用。

(顺便说一句,关于 hibernate.dialect 的错误是一个红鲱鱼 - 如果 Hibernate 找不到数据库,它就无法计算出方言,并且它错误地抱怨方言而不是潜在的问题。)

于 2012-08-20T16:32:49.123 回答
1

我刚刚花了 2 天的时间试图修复这个严重的错误,所以在standalone.xmljboss 的文件中它没有连接到一个数据源,而不是这样说,它抛出了这个错误,所以要小心这个 jboss。

于 2013-09-04T18:57:44.800 回答
0

这是因为 Hibernate 无法从 hibernate.cfg.xml 中读取所有属性。即使我遇到了同样的问题。如果您可以看到 java 控制台启动消息,它会说

Jul 13, 2012 12:32:56 PM org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: ***No appropriate connection provider encountered, assuming application will be supplying connections***
Connection cannot be null when 'hibernate.dialect' not set

这意味着,系统假设您将从应用程序配置属性。例如hibernate.cfg.xml 没有找到 hibernate.properties 文件

在我的情况下发生了这样的事情,以至于只从这个 xml 中查找了“映射资源”属性,而没有读取其他属性。所以我在我的类路径中添加了另一个 hibernate.properties 文件并在那里定义了连接属性。现在它正在从属性文件而不是 xml 中读取所有这些属性。(您始终可以从控制台窗口的资源中查看已读取的所有属性)。所以我不得不同时使用这些 xml 和属性文件。我仍然不清楚这个问题到底是什么。

于 2014-05-19T19:06:12.067 回答
0

com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/Products root root 10 true
org.hibernate.dialect.MySQLDialect update

    <!-- Mapping files -->

    <mapping resource="prod.hbm.xml"/>
</session-factory>

注意:第一行很重要,检查这个文档类型,即使是单个空格也会给出一些错误检查你的数据库有密码,如果是指定的密码。

于 2012-07-13T06:18:30.360 回答
0

别忘了打电话configure()

Configuration configuration = new Configuration();
configuration.configure();
于 2013-03-19T10:34:24.193 回答