Ответ 1
Ваш hibernate.cfg.xml
должен находиться внутри каталога src
; в противном случае он не будет покрываться целевым объектом Ant copymetafiles
, поэтому он не попадет в ваш скомпилированный путь к классам.
Я новичок в Hibernate, читаю эту книгу "Сохранение Java с Hibernate", и я пытаюсь реализовать пример оттуда. До сих пор моя сборка Ant прошла успешно, но когда я пытаюсь выполнить класс, содержащий основной метод, я получаю следующее сообщение об ошибке:
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.3
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
at persistence.HibernateUtil.<clinit>(Unknown Source)
at hello.Driver.main(Unknown Source)
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147)
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1405)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1427)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
... 2 more
Понятно, что hibernate не может найти мой файл конфигурации, который находится в корневом каталоге.
Проект
+lib
<all required libraries>
+src
+hello
HelloWorld.java
Message.java
message.hbm.xml
+persistence
HibernateUtil.java
build.xml
hibernate.cfg.xml
Мой полный исходный код можно найти здесь: http://pastebin.com/bGDUrxUf
У меня есть работающий сервер MySQL с данными hibernateapp и табличными сообщениями
Спасибо:)
Ваш hibernate.cfg.xml
должен находиться внутри каталога src
; в противном случае он не будет покрываться целевым объектом Ant copymetafiles
, поэтому он не попадет в ваш скомпилированный путь к классам.
Файл hibernate.cfg.xml shoul находится в корневой директории пути к классу вашего проекта. Если вы используете Maven, убедитесь, что он должен выглядеть как src > resources > hibernate.cfg.xml.
Это не должно быть в корневом каталоге, оно должно быть в вашем пути к классам.
Вы можете загрузить hibernate.cfg.xml
из другого каталога (не обязательно путь к классам) с помощью метода configure(File configFile)
, который принимает аргумент hibernateConfig
File
.
(обратите внимание, я использую hibernate 4.3.7)
Вот так:
String hibernatePropsFilePath = "/etc/configs/hibernate.cfg.xml";
File hibernatePropsFile = new File(hibernatePropsFilePath);
Configuration configuration = new Configuration();
configuration.configure(hibernatePropsFile);
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Если вы работаете с Intellij Idea
создайте папку с именем "resources" в папке src\main\java. Откройте настройки модуля вашего проекта, выберите "Модули" слева и на вкладке "источники" выберите вновь созданную папку "ресурсы" и отметьте ее как "Ресурсы". Создайте файл hibernate.cfg.xml
внутри этой вновь созданной папки "resources".
тогда это должно работать
Configuration con = new Configuration().configure("hibernate.cfg.xml");
Хотя уже поздно. Решение: вам нужно поместить этот файл конфигурации в папку с ресурсами (projectxxxx- > Resources), предоставив проект maven.
Файл конфигурации XML по умолчанию должен находиться в корне вашего CLASSPATH.
Вы можете выбрать другой файл конфигурации XML или путь, используя:
SessionFactory sessionFactory;
try {
Logger log = Logger.getLogger(LOG);
final String HIB_CONFIG = "/path/to/hibernate.cfg.xml";
final File hibernate = new File(HIB_CONFIG);
log.info("Try to init SessionFactory: " + HIB_CONFIG);
// Create the SessionFactory from hibernate.cfg.xml
if (hibernate.exists()) {
log.info("File exists. Init with custom file.");
sessionFactory = new Configuration()
.configure(hibernate)
.buildSessionFactory();
} else {
log.info("File does not exist. Init with default project file.");
sessionFactory = new Configuration().configure().buildSessionFactory();
}
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
Для получения дополнительной информации обратитесь к конфигурации сеанса