Обязательно ли иметь файл hibernate.cfg.xml для настройки - PullRequest
21 голосов
/ 12 января 2012

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

private static final SessionFactory factory;
private static final Properties properties;

static
{
    properties = new Properties();
    properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    properties.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/books");
    properties.setProperty("hibernate.connection.username", "jhtp7");
    properties.setProperty("hibernate.connection.password", "password");
    properties.setProperty("hibernate.show_sql", "com.mysql.jdbc.Driver");
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

    factory = new Configuration().setProperties(properties).configure().
                            buildSessionFactory();
}

Я попробовал вышеуказанный подход. Но я сталкиваюсь с проблемой, когда hibernate выдает исключение, говорящее "./hibernate.cfg.xml file missing".

Действительно ли необходимо хранить файл hibernate.cfg.xml?

Заранее спасибо

Ответы [ 4 ]

23 голосов
/ 12 января 2012

Я полагаю, это из-за вашего configure() вызова объекта Configuration. Попробуйте удалить это, и Hibernate не будет искать несуществующий файл. По сути, вы устанавливаете все необходимые свойства с помощью объекта properties, поэтому нет никакой необходимости указывать Hibernate искать файл hibernate.cfg.xml, который в точности соответствует методу configure().

14 голосов
/ 12 января 2012

Нет, я не думаю, что config xml является обязательным.Чтобы решить вашу проблему, я думаю, вам нужно использовать класс org.hibernate.cfg.Configuration.Посмотрите на эту ссылку: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html

По сути, вам нужны такие вещи, как

Configuration cfg = new Configuration()
.setProperty("hibernate.dialect", "com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.datasource", "jdbc:mysql://localhost:3306/books")
.setProperty("hibernate.order_updates", "true");

Затем, чтобы создать свой sessionFactory, вы просто говорите, cfg.buildSessionFactory ();

7 голосов
/ 11 октября 2015

Нет, использовать hibernate.cfg.xml не обязательно.Только не используйте .configure().Hibernate будет искать hibernate.cfg.xml, если мы используем .configure().

public class HibernateUtil {
    private static SessionFactory sessionFactory ;
    static {
        Configuration configuration = new Configuration();

        configuration.addAnnotatedClass (org.gradle.Person.class);
        configuration.setProperty("hibernate.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("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        configuration.setProperty("hibernate.hbm2ddl.auto", "update");
        configuration.setProperty("hibernate.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;
    }
} 
0 голосов
/ 03 сентября 2018

По сути, вы устанавливаете все необходимые свойства с помощью объекта properties , поэтому нет особой необходимости указывать Hibernate искать файл hibernate.cfg.xml, который в точности соответствует настройке ( ) метод делает. использование hibernate.cfg.xml не обязательно. Просто не используйте .configure ().

static {
    try {
        Properties prop= new Properties();
        prop.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");
        prop.setProperty("hibernate.connection.username", "root");
        prop.setProperty("hibernate.connection.password", "");
        prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");

        concreteSessionFactory = new AnnotationConfiguration()
       .addPackage("com.concretepage.persistence")
               .addProperties(prop)
               .addAnnotatedClass(User.class)
               .buildSessionFactory();
    } catch (Throwable ex) {
        throw new ExceptionInInitializerError(ex);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...