使用 hibernate.cfg.xml 时更改 hibernate.properties 文件的位置

Posted

技术标签:

【中文标题】使用 hibernate.cfg.xml 时更改 hibernate.properties 文件的位置【英文标题】:Change location of hibernate.properties file while using hibernate.cfg.xml 【发布时间】:2014-07-30 16:08:38 【问题描述】:

我们在hibernate.cfg.xml中提供db凭证

<hibernate-configuration>
    <session-factory>
       <property name="hibernate.connection.url">url</property>
       <property name="hibernate.connection.username">username</property>
       <property name="hibernate.connection.password">password</property>
    <session-factory>
<hibernate-configuration>

我们可以在此处提供这些属性,也可以在类路径中的 hibernate.properties 中提供这些属性。但我希望它们来自外部文件。我在 hibernate 中找不到更改默认 hibernate.properties 文件路径的方法。

请帮忙。

[编辑] java中生成sessionFactory对象的方法

public class HibernateUtil 

  private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() 
    // Create the session factory from hibernate.cfg.xml
    Configuration configuration = new Configuration();
    StandardServiceRegistryBuilder serviceRegistryBuilder =
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    return configuration.buildSessionFactory(serviceRegistryBuilder.build());
  

  public static SessionFactory getSessionFactory() 
    return sessionFactory;
  

【问题讨论】:

如何在 Java 代码中调用 sessionFactory 【参考方案1】:

以编程方式,您可以像这样加载 XML 和属性:

public class MyHibernate 

  private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() 
    try 
        URL r1 = MyHibernate.class.getResource("/hibernate.cfg.xml");
        Configuration c = new Configuration().configure(r1);

        try 
            InputStream is = MyHibernate.class.getResourceAsStream("/hibernate.properties");
            Properties props = new Properties();
            props.load(is);
            c.addProperties(props);
         catch (Exception e) 
            LOG.error("Error reading properties", e);
        

        return c.buildSessionFactory();
     catch (Throwable ex) 
        LOG.error("Error creating SessionFactory", ex);
        throw new ExceptionInInitializerError(ex);
    
  

  public static SessionFactory getSessionFactory() 
    return sessionFactory;
  

整个春天

您可以使用 PropertiesFactoryBean 从文件中读取属性并配置您的 LocalSessionFactoryBean:

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    <property name="hibernateProperties">
      <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location">path-to-properties-file</property>
      </bean>
    </property>
    ...
  </bean>

希望有用。

【讨论】:

我不想使用 InputStream 类来加载休眠属性,有没有办法在 spring 中包含这个 感谢帮助,试试这个

以上是关于使用 hibernate.cfg.xml 时更改 hibernate.properties 文件的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何从不同位置加载 hibernate.cfg.xml

Hibernate----配置文件Hibernate.cfg.xml

用hibernate.properties代替hibernate.cfg.xml配置常用的属性

如何使用 hibernate.properties 文件而不是 hibernate.cfg.xml

Hibernate框架hibernate.cfg.xml配置文件,配置自动生成表结构策略。

如何使用 maven 配置 hibernate-tools 以生成 hibernate.cfg.xml、*.hbm.xml、POJO 和 DAO