SessionFactory - 我不能使用buildSessionFactory函数

时间:2012-05-07 01:52:44

标签: java mysql xml hibernate

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

1 个答案:

答案 0 :(得分:0)

您的代码中有两个错误:

1)在finally子句中,您使用会话实例而无需进一步检查 - 但只有在代码的前两行成功执行时,实例才可用。所以要么用if (session != null)包围flush()和close(),要么稍后两行开始尝试。

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

如果这两个都没有解决问题:请发布NullPointerException的错误消息,其中包含几行堆栈跟踪并发布输出(是否有“完成”或第二个异常,这是由您的捕获条款?)。