【问题标题】:SessionFactory - I can't use buildSessionFactory functionSessionFactory - 我不能使用 buildSessionFactory 功能
【发布时间】:2012-05-07 01:52:43
【问题描述】:
    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 方法中被报告为已弃用。我也有一个正确的映射文件。非常感谢您的帮助。

【问题讨论】:

  • sessionnullfinally 块中的事实表明try 的前两个语句出现问题 - 你的catch 有什么问题吗?如果是这样,请发布该错误消息。

标签: java mysql xml hibernate


【解决方案1】:

您的代码中有两个错误:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多