【问题标题】:Have chosen to ignore this runtime exception java.lang.UnsupportedOperationException已选择忽略此运行时异常 java.lang.UnsupportedOperationException
【发布时间】:2012-02-07 22:28:57
【问题描述】:

我正在使用 hibernate.properties 来配置我的休眠连接到 mysql。但我需要 mysql 服务器以编程方式进行配置。

hibernate.connection.driver_class=com.mysql.jdbc.Driver
#hibernate.connection.url=jdbc:mysql://serverA/MyDB
hibernate.connection.username=root
hibernate.connection.password=password
hibernate.connection.pool_size=2
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

在代码中我尝试了这个

String jdbcProperty = "jdbc:mysql://"+Globals.DBSERVER+"/MyDB" ;
Configuration configuration = new Configuration()                         
    .setProperty("hibernate.connection.url", jdbcProperty) ;
sessionFactory = configuration.                                 
    configure().buildSessionFactory(new ServiceRegistryBuilder(                     
    .buildServiceRegistry());

以编程方式运行选择查询时出现此异常。

Exception in thread "main" java.lang.UnsupportedOperationException: The application must supply JDBC connections
at org.hibernate.service.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:62)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:276)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:299)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy4.prepareStatement(Unknown Source)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:178)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:147)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1739)
at org.hibernate.loader.Loader.doQuery(Loader.java:828)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
at org.hibernate.loader.Loader.doList(Loader.java:2463)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279)
at org.hibernate.loader.Loader.list(Loader.java:2274)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:332)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1588)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:224)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)

【问题讨论】:

  • 不,我以编程方式正确设置了休眠前缀。
  • 您正在破坏您的程序化配置,因为您是在 XML 配置解析发生之前进行的。请参阅我链接的重复问题,了解正确的编码方式。
  • 所以我修改了代码,还是出现异常。线程“main”中的异常 java.lang.UnsupportedOperationException:应用程序必须提供 JDBC 连接 'Configuration configuration = new Configuration().configure(); configuration.setProperty("hibernate.connection.url", jdbcProperty); sessionFactory = configuration.buildSessionFactory(new ServiceRegistryBuilder().buildServiceRegistry());`

标签: java hibernate


【解决方案1】:

如果我以编程方式进行所有配置,它就可以工作。或者我可以选择通过xml来做所有的配置。但我必须选择其中之一。混合效果不好。感谢大家在这里提供帮助。

编辑

我得到了混合工作。我需要以编程方式获取服务器、用户名和密码并从hibernate.properties 静态重置。

  • 长答案:参考this
  • 简答:我在
  • 中缺少.applySettings(configuration.getProperties())

代码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2011-03-17
    • 2011-03-13
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多