2013-09-26 3 views
1

Использование Hibernate 4.2.6 и 3.1.1 SpringПочему я получаю экземпляр AnnotationConfiguration, если AnnotationConfiguration устарел?

У меня есть один класс, подобный этому

@Entity 
@Table(name = "MY_TABLE") 
public class MyTable{ ... } 

Тогда я следующий в моем файле hibernate.cfg.xml

<mapping class="com.mycompany.myapp.persistence.domain.MyTable"/> 

Когда я запускаю тест JUnit, где я получаю сеанс и запрашиваю таблицу, я получаю следующую ошибку:

Initial SessionFactory creation failed.org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.mycompany.myapp.persistence.domain.MyTable"/> 

Я не понимаю, почему, когда на основе того, что я прочитал, AnnotationConfiguration устарела, а функциональность переместилась в конфигурацию.

Чтобы получить сеанс, я делаю это

Configuration configuration = new Configuration(); 
configuration.configure(); 
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   
sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
Session session = sessionFactory.openSession(); 

, но он не в состоянии получить сеанс и выдает эту ошибку.

+0

Ох ... Не нужно ли, по крайней мере, указывать драйвер db, url и т. Д. В xml? Мне даже не нужен бит ? – roark

+0

Ну, если я удалю это, ошибка AnnotationConfiguration исчезнет, ​​но сеанс не получит. Теперь я получаю сообщение об ошибке «Configured SessionFactory: null». Есть ли проблемы с кодом, который начинается с Configuration configuration = new Configuration():? – roark

ответ

1

Кажется, сейчас работает. Решение было двояким:

Первый, этот код является правильным:

а) отображение класса остается в hibernate.cfg.xml

б) Создать HibernateUtil Класс

public class HibernateUtil { 

    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
     try { 
      // Create the SessionFactory from hibernate.cfg.xml 
      Configuration configuration = new Configuration(); 
      configuration.configure(); 
      ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();   
      return configuration.buildSessionFactory(serviceRegistry); 
     } 
     catch (Throwable ex) { 
      // Make sure you log the exception, as it might be swallowed 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

c) Создать класс модели

d) Затем в тесте выполните экземпляр sessionFactory в настройке(), аналогично thi s

sessionFactory = HibernateUtil.getSessionFactory(); 

е) Тогда запрос к базе данных, как этот

Session session = sessionFactory.openSession(); 
session.beginTransaction(); 
List<TableName> result = session.createQuery("from table").list(); 
session.getTransaction().commit(); 
session.close(); 

Во-вторых, я использую JBoss 4.2 в качестве моего целевого выполнения, который с помощью Hibernate 3.4.2, до этого AnnotatedConfiguration класс был осуждается. Не нацеливание на JBoss в качестве среды выполнения приводит к использованию Hibernate 4.2.6 (импортируется через Maven) и не вызывает этой ошибки. Должно было уделять больше внимания, поскольку Hibernate печатает свою версию, когда она настраивается! :-)

Смежные вопросы