Hibernate не может разобрать файл cfg / создать фабрику сеанса

Если застрять в этой ошибке несколько дней, любая помощь будет принята с благодарностью. Спасибо!

Вот сообщение об ошибке из консоли:

log4j: ПРЕДУПРЕЖДЕНИЕ. Не удалось найти ни одного наставника для регистратора (org.hibernate.cfg.Environment). log4j:WARN Пожалуйста, правильно инициализируйте систему log4j. Исключение в потоке "main" org.hibernate.HibernateException: Не удалось проанализировать конфигурацию: /hibernate.cfg.xml в org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1491) в org.hibernate.cfg.Configuration.configure. (Configuration.java:1425) в org.hibernate.cfg.Configuration.configure(Configuration.java:1411) в hibernateTest.HibernateTest.main(HibernateTest.java:18) Причина: org.dom4j.DocumentException: истекло время ожидания соединения: connect Вложенное исключение: Тайм- аут соединения: соединение в org.dom4j.io.SAXReader.read(SAXReader.java:484) в org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1481) ... еще 3

Вот мой hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

    <!-- Database connection settings -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="connection.url">jdbc:oracle:thin:@ora-gpldev.xyz.com:1242:DUO231D</property>
    <property name="connection.username">user</property>
    <property name="connection.password">pass</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>

    <!-- Names the annotated entity class -->
    <mapping class="helloHibernate.User"/>

</session-factory>
</hibernate-configuration>

Вот мой класс HibernateTest.java:

package hibernateTest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import helloHibernate.User;

public class HibernateTest {

public static void main(String[] args) {
    User user = new User();
    user.setUserId(1);
    user.setUserName("TheOne");

    SessionFactory sessionFactory = new    Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit(); 
    System.out.println("Saved!");
}
}

Вот мой класс пользователя:

package helloHibernate;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name= "USER.USER2_TABLE")
public class User {

@Id
private int userId;
private String userName;

public void setUserId(int userId){
    this.userId = userId; 
}

public int getUserId() {
    return userId;
}

public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}
}

2 ответа

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

вам нужно добавить DTD, как показано ниже в вашем файле конфигурации, и, пожалуйста, также проверить требуемый файл jar в вашей lib.

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

или вы можете скопировать dtd из hibernate-mapping-3.0.dtd и hibernate-configuration-3.0.dtd, который находится внутри папки hibernate. например.

hibernate-core-4.3.5.Final.jar\org\hibernate\hibernate-configuration-3.0.dtd 
hibernate-core-4.3.5.Final.jar\org\hibernate\hibernate-mapping-3.0.dtd 

Если приведенное выше решение не решило вашу проблему, и вы по-прежнему получаете то же исключение, то его, потому что Hibernate пытается загрузить файл DTD для проверки файла hibernate.cfg.xml, и это не удалось из-за отсутствия подключения к Интернету. Поэтому укажите местоположение файла DTD в системе, используя classpath. Таким образом, DocType, который работал в автономном режиме, был бы;

<!DOCTYPE hibernate-configuration SYSTEM 
    "classpath://org/hibernate/hibernate-configuration-3.0.dtd">

или же

<!DOCTYPE hibernate-configuration SYSTEM 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

Обычно серверы находятся за брандмауэром и не имеют доступа к Интернету. Такой подход может пригодиться в этих случаях. Те же самые конфигурации будут работать и для файлов hmlnate mapping.

Я думаю, я понял вашу проблему. У вас неправильные банки. Итак, что произошло, вы зашли на сайт учебного пособия по спящему режиму и загрузили список банок. Они были не те, хотя. Вам нужно скачать банки на веб-сайте hibernate и добавить их в папку "required". Однако вам также необходим JTA-файл JAR, потому что по какой-то причине он не находится в требуемой папке JAR.

Другие вопросы по тегам