gpt4 book ai didi

hibernate - 不支持的操作异常 : The application must supply JDBC connections

转载 作者:行者123 更新时间:2023-12-02 11:29:37 25 4
gpt4 key购买 nike

如果我不以编程方式设置任何内容,只需调用 Configuration configuration = new Configuration().configure(); 并使用 hibernate.properties (如下所示),一切都会很好。当我尝试以编程方式提供用户名、密码和连接 url 时,我收到一个奇怪的异常,暗示 hbm 文件。我缺少什么?

这有效

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://myEC2/mCruiseOnServerDB?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
hsqldb.write_delay_millis=0
shutdown=true
hibernate.connection.username=root
hibernate.connection.password=mypwd
hibernate.connection.pool_size=2
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.c3p0.idle_test_period=300
hibernate.c3p0.timeout=120

根据 @Kshitij 的建议。进行混合模式。

hibernate.properties现在是

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hsqldb.write_delay_millis=0
shutdown=true
hibernate.connection.pool_size=2
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

代码

String connection = "jdbc:mysql://"
+ Globals.DBSERVER
+ "/mCruiseOnServerDB?autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
Configuration configuration = new Configuration()
.setProperty("hibernate.connection.url", connection)
.setProperty("hibernate.connection.username", Globals.DB_USER_NAME)
.setProperty("hibernate.connection.password", Globals.DB_PASSWORD);
configuration.configure();

sessionFactory = configuration
.buildSessionFactory(new ServiceRegistryBuilder()
.buildServiceRegistry());

异常

我现在遇到此异常,hbm 文件中的每个映射资源 条目都有一个异常。

11 May 2013 08:46:31,969 1300 [main] FATAL ReadOnlyOperations  - Have chosen to ignore this runtime exception java.lang.UnsupportedOperationException: The application must supply JDBC connections, may be fatal, examine this carefully
11 May 2013 08:46:31,969 1300 [main] FATAL ReadOnlyOperations - java.lang.UnsupportedOperationException: The application must supply JDBC connections

摘要

如果我使用所有 hibernate.properties 并且没有代码(代码中没有 .setProperty),一切都会很好。如果我使用部分 hibernate.properties 和部分代码(服务器、用户名、密码),我会在每个映射属性的 hbm 中收到错误。

我需要有人帮我弄清楚我错过了什么。它应该是非常基本的东西。

最佳答案

哇,刚刚解决了问题。

sessionFactory = configuration.buildSessionFactory(new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry());

我错过了

.applySettings(configuration.getProperties())

学习内容

  1. configure() 应该 setProperty 之后调用
  2. 使用hibernate.connection.url connection.url如果您使用 hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
  3. 将 hibernate 日志的 log4j 属性设置为 ALL,以便您可以看到更详细的问题
  4. 摆脱WARN Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide! ,您需要替换 http://www.hibernate.org/dtd/cfg.xml 和所有 hbm 文件中。不要忘记 hbm 文件,它们也使用相同的 DTD。

最后,引用这个,修复thisBill Gorder的最后建议太棒了。

private static SessionFactory configureSessionFactory()    
throws HibernateException {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
return configuration.buildSessionFactory(serviceRegistry);
}

关于hibernate - 不支持的操作异常 : The application must supply JDBC connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com