Не удалось найти ресурс cfg. xml с помощью hibernate.5.2.2.Final + spring.4.0.6.RELEASE в IDEA 2018.1 - PullRequest
0 голосов
/ 16 апреля 2020

Я обновил свою идею с 2017.1 до 2018.1, и у меня возникла проблема с Hibernate, которую я не могу решить ... Я искал и, похоже, с этим много проблем, но не смог понять, в чем заключается решение.

Итак, я использую hibernate.version 5.2.2.Final, spring.version 4.0.6.RELEASE, мой hibernate.cfg.xml находится в папке src\main\resources и в моем HibernateUtils у меня было что-то вроде этого:

public class HibernateUtils {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the ServiceRegistry from hibernate.cfg.xml
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .configure("hibernate.cfg.xml").build();

            // Create a metadata sources using the specified service registry.
            Metadata metadata = new MetadataSources(serviceRegistry).getMetadataBuilder().build();

            return metadata.getSessionFactoryBuilder().build();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

И это работало, пока я не обновил свою IDEA. Теперь у меня есть

Caused by: java.lang.ExceptionInInitializerError
    at org.mgo.HibernateUtils.buildSessionFactory(HibernateUtils.java:34)
    at org.mgo.HibernateUtils.getSessionFactory(HibernateUtils.java:11)
Caused by: org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [/main/resources/hibernate.cfg.xml]

Я перепробовал все, что нашел с этой ошибкой, чтобы поместить hibernate.cfg.xml непосредственно в папку sr c, указать путь к файлу xml, например "/resources/hibernate.cfg.xml" или "/main/resources/hibernate.cfg.xml", или оставить его пустым, как это .configure(), но, похоже, ничего не работает.

Я нашел здесь: https://github.com/spring-projects/spring-framework/issues/21340 то, с чем он не работает Spring 4.3.17.RELEASE + Hibernate 5.2.17.Final и работает с Spring 5.0.6.RELEASE + Hibernate 5.1.14.Final, но если я меняю таким образом, я получаю много других ошибок и не понимаю, почему мой hibernate.5.2.2.Final + spring.4.0.6.RELEASE больше не работает из-за моя идея. Поскольку я использую Maven, я пытался скомпилировать вне Idea, но столкнулся с той же ошибкой ...

1 Ответ

0 голосов
/ 16 апреля 2020

да, может это кому-нибудь поможет ... Я сделал это без hibernate.cfg. xml, вот так: https://dzone.com/articles/hibernate-5-java-configuration-example

public class HibernateUtils {

    private static SessionFactory sessionFactory;

    public static SessionFactory getSessionFactory() {

        if (null == sessionFactory) {
            try {
                Configuration configuration = new Configuration();

                // Hibernate settings equivalent to hibernate.cfg.xml's properties
                Properties settings = new Properties();

                settings.put(Environment.DRIVER, "com.microsoft.sqlserver.jdbc.SQLServerDriver");
                settings.put(Environment.URL, "jdbc:sqlserver://localhost;databaseName=DBA;instance=SQLEXPRESS");
                settings.put(Environment.USER, "user");
                settings.put(Environment.PASS, "xxx");
                settings.put(Environment.DIALECT, "org.hibernate.dialect.SQLServerDialect");
                settings.put(Environment.SHOW_SQL, "true");
                settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");

                configuration.setProperties(settings);

                configuration.addAnnotatedClass(MyClass1.class);
                configuration.addAnnotatedClass(MyClass2.class);

                ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                        .applySettings(configuration.getProperties()).build();

                sessionFactory = configuration.buildSessionFactory(serviceRegistry);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sessionFactory;
    }
}
...