2013-09-26 58 views
1

使用Hibernate 4.2.6和3.1.1春季爲什麼AnnotationConfiguration不推薦使用AnnotationConfiguration實例?

我有類似這樣

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

一個類然後我就在我的hibernate.cfg.xml文件下列

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

當我運行一個JUnit測試時,我得到一個Session並查詢該表,我得到以下錯誤:

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

哦......難道我至少需要在xml中指定db驅動程序,url等嗎?我甚至不需要這個 bit嗎? – roark

+0

好吧,如果我刪除它,那麼AnnotationConfiguration錯誤消失,但它不會得到一個會話。我現在得到一個錯誤,「Configured SessionFactory:null。」以Configuration configuration = new Configuration()開頭的代碼是否有問題? – roark

回答

1

似乎現在工作。溶液是雙重的:

首先,這個代碼是正確的:

一個)映射類保持在hibernate.cfg.xml

b)中創建的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)創建Model類

d)然後在測試中,在setup()中實例化sessionFactory,類似於小號

sessionFactory = HibernateUtil.getSessionFactory(); 

E)然後查詢數據庫這樣

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在創建它的版本時應該更加註意! :-)

相關問題