Я работаю над проектом, используя Java, Spring MVC и Hibernate (моя IDE — IntelliJ). Когда я пытаюсь получить доступ к URL-адресу (который делает простой вызов моей базы данных Oracle через Hibernate) на моем локальном хосте после развертывания в Tomcat, я получаю следующую ошибку:
Состояние HTTP 500 — Ошибка обработки запроса; вложенным исключением является org.hibernate.internal.util.config.ConfigurationException: указанный файл cfg.xml [C:\apache-tomcat-7.0.52\bin\src\main\resources\hibernate.cfg.xml] не существует
Мой вопрос: почему моя программа ищет в моей папке apache-tomcat? Я никогда не указывал в своем коде, что нужно искать в этой папке, и все мои тесты проходят успешно, когда дело доходит до использования Hibernate.
Подходы, предпринятые на данный момент для решения проблемы:
- Пытался восстановить мой файл WAR с нуля
- Выполнение очистки maven, компиляция, установка, а затем повторное развертывание в Tomcat
- org.hibernate.internal.util.config.ConfigurationException: Не удалось найти ресурс cfg.xml [/HibernateTest/src/hibernate.cfg.xml]
- http://www.mkyong.com/hibernate/how-to-load-hibernate-cfg-xml-from-other-directory/
- Расположение файла hibernate.cfg.xml в проекте?
Ни один из перечисленных выше подходов не сработал для меня. Я предоставил свой код ниже вместе с моей файловой структурой, чтобы помочь:
Мой метод SessionFactory:
private static SessionFactory getSessionFactory() {
String hibernatePropsFilePath = "src/main/resources/hibernate.cfg.xml";
File hibernatePropsFile = new File(hibernatePropsFilePath);
Configuration configuration = new Configuration();
configuration.configure(hibernatePropsFile);
configuration.addAnnotatedClass(Request.class);
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
Приложение.java
@RestController
@RequestMapping("/ourApp")
public class Application {
@RequestMapping(value = "/getRequestResponse", method = RequestMethod.GET, headers = "Accept=application/json")
@ResponseBody
public String returnRequestResponse() {
RequestService requestService = new RequestService();
Request request = requestService.findById(1);
Gson gson = new Gson();
return gson.toJson(request);
}
}
Структура файла:
Обновлять
Это работает, если я помещаю файл конфигурации Hibernate в папку Tomcat.
Мои тесты теперь терпят неудачу, когда я пытался реализовать решение shankarsh15 в своем методе SessionFactory. Вот моя функция setUp перед запуском моих тестов:
@Before
public void setUp() throws Exception {
Configuration configuration = new Configuration();
configuration.addAnnotatedClass(MyService.class)
.addAnnotatedClass(MyModel.class);
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
configuration.setProperty("hibernate.connection.driver_class", "oracle.jdbc.OracleDriver");
configuration.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@//servername.mycompany.com:12345/abcdefg");
configuration.setProperty("hibernate.connection.username", "username");
configuration.setProperty("hibernate.connection.password", "password");
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
}
Обновлен hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:oracle:thin:@//servername.mycompany.com:12345/abcdefg</property>
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="connection.username">username</property>
<property name="connection.password">password</property>
<property name="show_sql">true</property>
<mapping class="com.mycompany.project.modelName.model.MyModelClass"/>
</session-factory>
</hibernate-configuration>