我是 Hibernate 的新手,我的问题很简单。持久化课程对象由 Hibernate 缓存。
我希望用户编辑课程并在数据库中更新它。它可以修改数据库中的记录,但是,当我完成更新并重定向到显示课程信息的操作时。页面会在更新前缓存课程信息。
假设我将持续时间从 3 编辑到 30 。并重定向到信息页面,持续时间将为 3 ,当我刷新时,持续时间将再次为 3 。但是当我再次刷新时,持续时间将是 30。3- >3->30->3->3->30等等。但数据库记录实际上是 30。
我已经想到了一个解决方案,session.clear
每次我想检索数据库记录时清除会话缓存。但我想知道这是否是一个好的解决方案。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package short_course_db;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
/**
*
* @author jason
*/
public class CourseDAO {
Session session = null;
public CourseDAO() {
this.session = HibernateUtil.getSessionFactory().getCurrentSession();
}
public List<Course> getCoursesByKeyWord(String keyword) {
List<Course> courses = null;
try {
session.beginTransaction();
keyword = "'%" + keyword + "%'";
Query q = session.createQuery("from Course as course where course.description like " + keyword);
courses = q.list();
} catch (Exception e) {
e.printStackTrace();
}
return courses;
}
public Course findCourse(int id) {
Course course = null;
try {
session.beginTransaction();
Query q = session.createQuery("from Course as course where course.id=" + id);
course = (Course) q.uniqueResult();
} catch (Exception e) {
e.printStackTrace();
}
return course;
}
public List<Course> all() {
List<Course> courses = null;
try {
session.beginTransaction();
Query q = session.createQuery("from Course order by id");
courses = q.list();
} catch (Exception e) {
e.printStackTrace();
}
return courses;
}
public void updateCourse(Course course) {
try {
session.beginTransaction();
session.update(course);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void saveCourse(Course course) {
try {
session.beginTransaction();
session.save(course);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}