在简单的hibernate程序中,我通过使用以下代码获取Employee表的详细信息。 : - 员工员工=(员工)session.get(Employee.class,new Integer(6)); 同时我在控制台中打印信息 System.out.println(“名称: - ”+ employee.getName()+“地址: - ”+ employee.getAddress());
现在暂停执行15000毫秒。的的Thread.sleep(15000); 在此期间,我通过数据库并手动更改员工表的详细信息。 当 15000ms完成时,我清除会话缓存并再次尝试获取相同的记录,但我得到相同的对象具有相同的信息。睡眠时间内的任何信息变化都不会被反映出来。
以下是程序
配置配置=新配置();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry registry = (ServiceRegistry) builder.buildServiceRegistry();
builder.applySettings(configuration.getProperties());
ServiceRegistry registry = (ServiceRegistry) builder.buildServiceRegistry();
factory = configuration.buildSessionFactory(registry);
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee = (Employee) session.get(Employee.class, new Integer(6));
System.out.println("Name : -" + employee.getName() + "Address :- " + employee.getAddress());
Thread.sleep(15000);
//now i made change in database going through the mysql workbench and manually change the details of emp id 6.
System.out.println(" cache remove");
session.evict(employee);
session.flush();
Employee employee1 = (Employee) session.get(Employee.class, new Integer(6));
System.out.println("Name : -" + employee1.getName() + "Address :- " + employee1.getAddress());
printEmp(employee);
session.getTransaction().commit();
session.close();
答案 0 :(得分:0)
首先确保您的手动数据库更改在数据库本身中得到反映(提交),因为您已经开始了事务。
检查数据库隔离级别。我认为你的程序按照应有的方式运行。
您也可以尝试使用show sql选项进行调试。