【问题标题】:connecting to Mysql Database using a properties file with hibernate使用带有 hibernate 的属性文件连接到 Mysql 数据库
【发布时间】:2018-06-13 18:37:34
【问题描述】:

我已经查看了与此类似的各种问题,但没有找到直接解决需要寻求帮助的问题。

所以以前我在休眠 xml 配置文件中拥有所有数据库连接详细信息,如下所示(此时一切都按预期工作,所以我只包含了更改的行)

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">URL</property>
    <property name="connection.username">USERNAME</property>
    <property name="connection.password">PASSWORD</property>

我将这些行改为

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

我获取了这些属性并将它们放在属性文件 dbConnection.properties 中

connection.driver_class=com.mysql.jdbc.Driver
connection.username=USERNAME
connection.password=PASSWORD
connection.url=URL

我的应用程序中有一个构建并返回 SessionFactory 的方法

private SessionFactory getSessionFactory(){
         Properties dbConnectionProperties = new Properties();

         try {
            dbConnectionProperties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("dbConnection.properties"));

        } catch (IOException e) {
            e.printStackTrace();
        }

         SessionFactory factory = new Configuration()
                    .mergeProperties(dbConnectionProperties)
                    .configure("hibernate.cfg.xml")
                    .addAnnotatedClass(EmailMessage.class)
                    .buildSessionFactory();

        return factory;

以及使用会话工厂的方法

    public void PostUnpostedMessageToFacebook(){


        SessionFactory factory = getSessionFacto

ry();
    System.out.println(factory.getProperties());
    // create a session 
    Session session = factory.getCurrentSession();
    session.beginTransaction();
    **** some more code let me know if you want to see it but I didn't think it was relevant as this is where the error is thrown ****

在我进行这些更改之前,一切都按预期进行。但是,现在我收到以下错误。

您能否帮助我理解为什么现在会抛出此错误?因为我不太明白如何或为什么不再返回 JDBC 连接。

非常感谢

Exception in thread "main" java.lang.UnsupportedOperationException: The application must supply JDBC connections
    at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.getConnection(UserSuppliedConnectionProviderImpl.java:44)
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:115)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:145)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:263)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:271)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:214)
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:56)
    at org.hibernate.internal.AbstractSharedSessionContract.beginTransaction(AbstractSharedSessionContract.java:409)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:355)
    at com.sun.proxy.$Proxy23.beginTransaction(Unknown Source)
    at com.post2facebook.postToFacebookApp.GmailToFacebook.PostUnpostedMessageToFacebook(GmailToFacebook.java:80)
    at com.post2facebook.postToFacebookApp.MainApp.gmailToFacebookOnlyDemo(MainApp.java:16)
    at com.post2facebook.postToFacebookApp.MainApp.main(MainApp.java:11)

【问题讨论】:

  • 问题可能出在配置上。我不是休眠专家,但请查看此链接:stackoverflow.com/questions/23222632/…
  • 谢谢,我之前确实看过,并尝试根据他们的建议更改属性文件,但我遇到了同样的问题。
  • 你试过在属性前加上 hibernate.?
  • 是的,我尝试在属性文件中为属性添加前缀,例如hibernate.connection.driver_class=com.mysql.jdbc.Driver,但随后我得到了许多其他错误线程“main”中的异常 org.hibernate.service.spi.ServiceException:无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 后跟大约 6 个其他错误
  • 没关系,在我的数据库 url 属性中,由于某种原因 jdbc:mysql://localhost:3306/gmail_to_facebook?useSSL=false&amp;amp;useJDBCCompliantTimezoneShift=true&amp;amp;useLegacyDatetimeCode=false&amp;amp;serverTimezone=UTC 在 xml 文件中工作,但从属性文件中检索时却没有,我不得不删除 amp 和 @987654331 @来自网址感谢您的帮助

标签: java mysql hibernate


【解决方案1】:

感谢您的帮助,作为对我自己和其他用户的说明,不要认为以前有效的东西仍然有效。我的问题是用于数据库连接的 URL。

当这个 URL 在 XML 文件中时,它如下jdbc:mysql://localhost:3306/gmail_to_facebook?useSSL=false&amp;amp;useJDBCCompliantTimezoneShift=true&amp;amp;useLegacyDatetimeCode=false&amp;amp;serverTimezone=UTC

但由于某种原因,从属性文件中获取此文件时,处理 amp 和 ; 时出现问题在 URL 中,所以我删除了它们以获得以下内容

hibernate.connection.url=jdbc:mysql://localhost:3306/gmail_to_facebook?useSSL=false&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2021-02-09
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多