關於Hibernate 5 和 Hibernate 4 在創建SessionFactory的不同點分析(解決 org.hibernate.MappingException: Unknown entity: xx類報錯問題)


Hibernate4版本的SessionFactory實例構建的步驟是這樣的(也是很多學習資料的通用范本):

 

//Configuration就是代表着hibernate的那個xml配置文件對象,如果configure方法中沒有參數的話,默認是就是hibernate.cfg.xml。

Configuration conf = new Configuration().configure();

//服務注冊,這是使用創建者模式,根據配置文件中的配置字段來構建注冊服務(這應該是hibernate架構中注冊服務的通用流程)。

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
applySettings(conf.getProperties()).build();

//使用實例化好了的注冊服務,使用Configuration中的工廠模式實例化了SessionFactory
SessionFactory sf = conf.buildSessionFactory(serviceRegistry);

如果你用的是Hibernate4的版本,這樣做完全OK的,運行的時候不會報MappingException。

但是如果你使用Hibernate5的版本,就會報錯。那么Hibernate5應該怎樣構建SessionFactory呢,如下:

 

//和V4版本比,V5版本看不到configure對象了。直接使用創建者模式構建出了標准服務注冊對象

StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build();

//這個對象metadata對象應該扮演了一個萬金油的角色,使用以上的注冊對象作為入參構建這個對象

Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder()
.applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();


//最后由這個metadata使用構建出sessionFactory
SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();

比較一下兩種方式,V4的構建中思路,主要還是configure對象中用工廠模式來構建,很傳統的模式。V5全部修改為創建者模式,3條語句,3個創建,

3個穿行的步驟。構建的思路明顯清晰很多。

其實換句話來說,V4的構建也沒什么不好的,非得改成V5的方式,不改工作還不正常了。這一點我覺得體驗不太好。這大概就是程序員的完美主義在作祟吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM