我是Hibernate的新手,我的問題很簡單。持久性課程Object由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();
}
}
}
內發生的呢?我試過了,但並沒有幫助 – code4j
我認爲那時候你提出的解決方案是有效的,只要我能想到。因爲即使通過使用session.flush()它也會將對象發送到數據庫進行持久化,並且如果您不希望它們被緩存,則後續調用session.clear()是必需的。 –
最後我用'clear()',但我想要另一個解決方案:) – code4j