2012-05-07 41 views
0
public static void main(String[]arg) 
    { 
     Session session = null; 

     try{ 
      @SuppressWarnings("deprecation") 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session =sessionFactory.openSession(); 

      Contact contact = new Contact(); 
      contact.setID(3); 
      contact.setFirstName("Professor"); 
      contact.setLastName("Katagawa"); 
      contact.setEmail("[email protected]"); 
      session.save(contact); 
      System.out.println("Done"); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e.getMessage()); 
     } 
     finally 
     {   
      session.flush(); 
      session.close(); 
     } 
    } 

我總是會在session.flush()中得到一個NullPointer異常。 我已經有一個類聯繫定義如下,SessionFactory - 我無法使用buildSessionFactory函數

public class Contact 
{ 
    private String firstName; 
    private String lastName; 
    private String email; 
    private int id; 

    public String getEmail() 
    { 
     return email; 
    } 

    public String getLastName() 
    { 
     return lastName; 
    } 

    public String getFirstName() 
    { 
     return firstName; 
    } 

    public int getID() 
    { 
     return id; 
    } 

    public void setID(int ID) 
    { id=ID; } 

    public void setEmail(String e) 
    { 
     email=e; 
    } 

    public void setFirstName(String fn) 
    { 
     firstName=fn; 
    } 

    public void setLastName(String ln) 
    { 
     lastName=ln; 
    } 
} 

線在主方法 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 爲廢棄報告。我也有一個正確的映射文件。非常感謝你的任何幫助。

+1

'finally'中的'session'爲'null'這一事實表明'try'的前兩個語句中出現了錯誤 - 您的catch函數捕獲了什麼?如果是的話,請張貼錯誤消息。 –

回答

0

有在你的代碼的兩個錯誤:

1)在您使用會話實例沒有進一步檢查finally從句 - 但是,如果你的代碼的前兩行成功執行的情況下僅適用。所以要麼使用if (session != null)來包圍flush()和close(),要麼在兩行之後開始try塊。

2)異常後,該會話不能再使用;尤其是這是不可能保存對象或刷新會話。這意味着,你的flush()和close()應該在session.save()之後的普通塊中,而不是在finally子句中。

如果上述兩者都不能解決問題:請將您的NullPointerException的錯誤消息與幾行堆棧跟蹤一起發佈,併發布輸出(是否存在「已完成」或您的第二個異常catch子句?)。

相關問題