2015-02-10 78 views
0

我正在通過閱讀書籍和做例子來學習Hibernate。我正在看的例子上休眠HSQLDB兩會

http://www.java2s.com/Code/Java/Hibernate/UseTwoSessions.htm的網站。

這是一個有Java示例的知名站點。在這個例子中,它使用了我在它自己的JVM中運行的HSQLDB。出於某種原因,當使用第二個會話時,此示例似乎會掛起。所以問題是,這個例子有問題嗎?你可以讓一個人看看它,並確定它是否是一個有效的例子。

問題出在主要類中(請參閱下面的代碼)事件event2 =(Event)session2.load(Event.class,event.getId());此行掛起

感謝您的幫助。注意:如果這段代碼不好,請告訴www.java2s.com的人...如果它確實起作用,請告訴我我可能做錯了什麼..

我正在使用這個例子,並增加了連接數量和其他一系列變化。是否有一些變化可以使TwoSessions示例有效?

感謝您的幫助 理查德

公共靜態無效的主要(字串[] args){// HibernateUtil.setup(「創建表的活動(UID INT,VARCHAR名,START_DATE日期,持續時間INT); 「);

// hibernate code start 
    HibernateFactory.buildSessionFactory(); 
    Session session = HibernateFactory.openSession(); 
    Session session2 = HibernateFactory.openSession(); 
    Event event = new Event(); 
    event.setName("Name"); 
    session.save(event); 
    session.flush(); 
    Event event2 = (Event) session2.load(Event.class, event.getId()); 
    System.out.println(event2.getName()); 
    HibernateUtil.checkData("select uid, name from events");   
// hibernate code end 

}

回答

0

的代碼可能寫的HSQLDB 1.8這限制了交易的能力。當前版本期望每個連接都在數據庫中的自己的線程中運行。使用兩個獨立的線程。

+0

好吧,看起來上面的代碼將無法正常工作。你需要創建一個事務,所以session.beginTransaction();和session.getTransaction()。commit();是必要的。如果您嘗試Hibernate示例,請查找此代碼。 – 2015-02-21 04:19:41