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;
    }
}

main メソッドの行 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); は非推奨として報告されています。正しいマッピング ファイルもあります。助けてくれてありがとう。

4

1 に答える 1

0

コードに 2 つのエラーがあります。

1) finally 句では、それ以上のチェックなしでセッション インスタンスを使用しますが、インスタンスは、コードの最初の 2 行が正常に実行された場合にのみ使用できます。したがって、flush() と close() を で囲むか、if (session != null)2 行後に try ブロックを開始します。

2) 例外の後、セッションはそれ以上使用できません。特に、オブジェクトの保存やセッションのフラッシュは不可能です。つまり、flush() と close() は、finally 句ではなく、session.save() の後の通常のブロックにある必要があります。

これら 2 つのいずれも問題を解決しない場合: NullPointerException のエラー メッセージをスタック トレースの数行と共に投稿し、出力も投稿してください (「完了」または catch 句によって食べられる 2 番目の例外はありますか?) .

于 2012-05-07T08:07:57.927 に答える