Hibernate检索查询不起作用

时间:2016-04-20 06:57:18

标签: java mysql hibernate

我的JSF2代码中有一个hibernate实现,试图从MySQL DB中列出一些记录。有以下代码片段:Search.java - 实现查询逻辑; Student.java - 实现记录保存逻辑。

我遇到的问题是每当我运行Search.java时,返回的结果都是'null'。

请注意 - 我的数据库已有很多条目,即使我尝试查询Student myStudent = session.get(Student.class, 23);,它也会返回'null'。
这里23是SQL表中的id字段。此外,该表已自动生成PK作为id。我有另一个类用于插入完全正常的记录。

Search.java

public class Search {

    public static void main(String[] args) {

        // create session factory
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
            .addAnnotatedClass(Student.class).buildSessionFactory();

        // create session
        Session session = factory.getCurrentSession();

        try {

            // start a transaction
            Student tempStudent = new Student("bob", "thebuilder", "good", "blabla@bla.com", "(456)-456 5897");
            session.beginTransaction();

            session.save(tempStudent);

            // commit transaction
            session.getTransaction().commit();
            System.out.println("id of the student is " + tempStudent.getId());

            session = factory.getCurrentSession();
            session.beginTransaction();

            System.out.println("student with id " + tempStudent.getId());
            Student myStudent = session.get(Student.class, tempStudent.getId());

            session.getTransaction().commit();

            System.out.println("Done!");
        } finally {
            factory.close();
        }
    }
}

请告知我在这里可能犯的错误。我花了几个小时谷歌搜索。另外,请原谅我(可能)菜鸟错误,我是Hibernate和这个网站的新手。

如果我需要发布错误堆栈或我的cfg.xml,请告诉我。

1 个答案:

答案 0 :(得分:0)

正如我在您的案例中所见,tempStudent的ID为0.您需要通过已保存学生的ID获取会话。 试试这个:

Serializable id= session.save(tempStudent);
...
Student myStudent = session.get(Student.class, id);

您还可以在show_sql文件中启用hibernate.cfg属性。它会记录所有生成的sql,所以如果没问题你就可以解决。