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("Bradsis@yahoo.com");
            session.save(contact);
            System.out.println("Done");
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {        
            session.flush();
            session.close();
        }
    }

我总是在 session.flush() 中得到一个 NullPointer 异常。我已经有一个类 Contact 定义如下,

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(); main 方法中的行 被报告为已弃用。我也有一个正确的映射文件。非常感谢您的帮助。

4

1 回答 1

0

您的代码中有两个错误:

1)在 finally 子句中,您无需进一步检查即可使用会话实例 - 但仅当您的代码的前两行成功执行时,该实例才可用。所以要么用 a 包围 flush() 和 close() ,if (session != null)要么在两行之后开始 try 块。

2) 出现异常后会话不能再使用;特别是不可能保存对象或刷新会话。这意味着,您的 flush() 和 close() 应该在 session.save() 之后的正常块中,而不是在 finally 子句中。

如果这两个都不能解决问题:请使用几行堆栈跟踪发布 NullPointerException 的错误消息,并发布输出(是否有“完成”或第二个异常被你的 catch 子句吃掉?) .

于 2012-05-07T08:07:57.927 回答