Установка свойств программно в Hibernate - PullRequest
16 голосов
/ 20 мая 2011

Как я могу убедиться, что все свойства загружены из hibernate.cfg.xml, а затем добавить дополнительные свойства программно?Я видел следующий фрагмент кода, но он выглядит как совершенно новая конфигурация, а не как дополнение к существующей.

Configuration c = new Configuration();
c.configure();

c.setProperty("hibernate.connection.username", "abc" );
c.setProperty("hibernate.connection.password", "defgh629154" ); 

Ответы [ 5 ]

14 голосов
/ 20 мая 2011

Фрагмент кода, который вы показали, это то, что вам нужно. Просто используйте существующую конфигурацию вместо создания новой.

Если не вы создаете экземпляр конфигурации (например, Spring), вам нужно расширить класс, который ее создает.

8 голосов
/ 20 мая 2011

Ваш фрагмент кода должен загрузить hibernate.cfg.xml из корня пути к классам, а затем программно добавить или перезаписать свойства конфигурации.Поэтому, пожалуйста, убедитесь, что ваш так называемый «существующий hibernate.cfg.xml» находится в корне пути к классам.

Если ваш "существующий * hibernate.cfg.xml" находится не в корне пути к классам, а в каком-то пакете, вы можете загрузить его, указав путь к пакету в configure (), например

Configuration config = new Configuration();
config.configure("package1/package2/hibernate.cfg.xml");
config.setProperty("hibernate.connection.username", "update" );
config.setProperty("hibernate.connection.password", "defgh629154" ); 
6 голосов
/ 04 июня 2014

Это работает правильно, чем я думал

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.


            Properties c = new Properties();
            c.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
            c.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
            c.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/mydiscou_billing?zeroDateTimeBehavior=convertToNull");
            c.setProperty("hibernate.connection.username", "root");
            c.setProperty("hibernate.connection.password", "123");
            c.setProperty("hibernate.connection.autoReconnect", "true");

            c.setProperty("connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
            c.setProperty("c3p0.min_size", "5");
            c.setProperty("c3p0.max_size", "20");
            c.setProperty("c3p0.timeout", "1800");
            c.setProperty("c3p0.max_statements", "100");
            c.setProperty("hibernate.c3p0.testConnectionOnCheckout", "true");




            sessionFactory = new AnnotationConfiguration().setProperties(c).configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
4 голосов
/ 11 октября 2015
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
  private static SessionFactory sessionFactory;

  static {
    Configuration configuration = new Configuration();

    configuration.addAnnotatedClass (org.gradle.Person.class);
    configuration.setProperty("connection.driver_class","com.mysql.jdbc.Driver");
    configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");                                
    configuration.setProperty("hibernate.connection.username", "root");     
    configuration.setProperty("hibernate.connection.password", "root");
    configuration.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
    configuration.setProperty("hibernate.hbm2ddl.auto", "update");
    configuration.setProperty("show_sql", "true");
    configuration.setProperty(" hibernate.connection.pool_size", "10");

    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    sessionFactory = configuration.buildSessionFactory(builder.build());
  }

  public static SessionFactory getSessionFactory() {
     return sessionFactory;
  }
} 

Использование .configure() заставляет Hibernate искать файл hibernate.cfg.xml.Поэтому, если вы не хотите использовать файл hibernate.cfg.xml, не используйте .configure().

1 голос
/ 20 мая 2011

Возможно, вы могли бы создать свою конфигурацию следующим образом:

Configuration cfg = new Configuration();
cfg.addResource("Hibernate.cfg.xml");

и затем применить свои конкретные настройки свойств.

Я предположил, что вы действительно хотите создать свою конфигурацию самостоятельно.Если нет, то вам нужно получить его от того, что его создало, например, SpringSessionFactoryBean, если вы это используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...