我的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
,请告诉我。
答案 0 :(得分:0)
正如我在您的案例中所见,tempStudent
的ID为0.您需要通过已保存学生的ID获取会话。
试试这个:
Serializable id= session.save(tempStudent);
...
Student myStudent = session.get(Student.class, id);
您还可以在show_sql
文件中启用hibernate.cfg
属性。它会记录所有生成的sql,所以如果没问题你就可以解决。