私は 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();
}
}
}