getting hibernate default schema name programmatically from session factory?

后端 未结 4 946
无人及你
无人及你 2021-02-07 15:24

I was wondering if there is a way to get the default schema name from session factory, somehow? The reason I need to get it is because I have to use a one native SQL and I have

相关标签:
4条回答
  • 2021-02-07 15:47

    I just found out that hibernate has {h-schema} replacement that can be used in native sql queries. So this does the job cleanly when you are connected to a one schema in oracle database and want to execute queries against different schemas. Example would be:

    select * from {h-schema}table_name
    

    This ways instead of doing a manual replaceAll in a query, hibernate will take care of everything given that each session factory is configured with "hibernate.default_schema" property.

    0 讨论(0)
  • 2021-02-07 15:53

    @Ryan Morlok, I can not comment on your answer due to lack of reputation. Your answer is correct, but its deprecated now. In hibernate version 5.0.1, schema name can be get using

    (SessionFactoryImpl)sessionFactory).getProperties().getProperty("hibernate.default_schema")
    
    0 讨论(0)
  • 2021-02-07 15:58

    I had problems with John's solution to use {h-schema} when using the Criteria api's Restrictions.sqlRestriction(...) (probably because this substitution happens within the separate HQL api). Similar to Michael's solution, I used:

    SessionFactoryImplementor sfi = (SessionFactoryImplementor)sessionFactory;
    String name = sfi.getSettings().getDefaultSchemaName();
    
    0 讨论(0)
  • 2021-02-07 16:12

    This will do the trick:

      SessionFactoryImplementor sfi = (SessionFactoryImplementor) getSessionFactory();           
      Settings settings = sfi.getSettings();
      ConnectionProvider connectionProvider = settings.getConnectionProvider();
      try {
            Connection connection = connectionProvider.getConnection();
            DatabaseMetaData databaseMetaData = connection.getMetaData();
            String url = databaseMetaData.getURL();
            //substring the string to what you want
            System.out.println(url);
      } catch (SQLException e) {
           //throw something
      }
    
    0 讨论(0)
提交回复
热议问题