【发布时间】:2012-12-17 18:45:21
【问题描述】:
我是 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();
}
}
}
【问题讨论】: