看到有一个实训的大四学生做hibernate缓存处理,出现不能及时显示数据的问题。我在他下面这样回复他的日志---------》!
太多了,基本没看。不过,我解决一般采用2次刷新。对于数据库的原子事物操作,fulsh ,clear之下。每次请求之前。第二次是自动执行的js页面获取最新的数据。这样,基本可以解决hibernate缓存问题。如果你测试2个不同的账号执行操作或者不同权限账号的操作,一定要小心,hibernate的缓存,主要是session缓存,因为你有的session中存在几个不同账号的来回覆盖。建议每次测试单个账号请,重新登录。不要交替来操作。。或者你在局域网其他的地方登录另一个账号测试。以上都是我解决这类问题的看法。
------
然后回头看看他的日志,转帖过来的很多常用代码。和性能的优化策略。我来写日志为了这个顺便拉过来总结下
。以前日志已经涉及到过一次了。。。
(假设我们user表的age有5000条大于0的记录,)
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Itertaor users=session.find("from User u where u.age>0").itertaor();//HSL语句就不做解释了
while(user.hasNext()){
User user =(User)users.next();
user.setAge(user.getAge()+1);
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
tx.commit();
session.close();
性能与空间的问题时,,,要以性能为主..这也就是说要牺牲空间
所以程序最好跳过Hibernate API 而直接通过JDBC API来执来
Session session=SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn =session.connection();
PreparedStatement pstmt = conn.prepareStatement("update users set age=age+1 "+"where age >0");
pstmt.executeUpdate();
tx.commit();
以创建存储过程,,用底层的数据库运行..这样性能好,速度快....
UserUpdate的存储过程代码:
create or replace procadure UserUpdate(u_age in number) as
begin
update users set age=age+1 where age>u_age;
end;
下面的是在程序中如何调用我们命名的存储过程
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn=session.connection();
String str="{call UserUpdate(?)}";
CallableStatement cstmt= conn.prepareCall(str);
cstmt.setInt(1,0);
cstmt.executeUpdate();
tx.commit(); 注意.开源的MySQL中不支持存储过程的..
这样以上的3次性能优化,从hibernate到jdbc再到本地化数据库存储过程。逐步优化。
执行的更快。

------
然后回头看看他的日志,转帖过来的很多常用代码。和性能的优化策略。我来写日志为了这个顺便拉过来总结下

(假设我们user表的age有5000条大于0的记录,)
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Itertaor users=session.find("from User u where u.age>0").itertaor();//HSL语句就不做解释了
while(user.hasNext()){
User user =(User)users.next();
user.setAge(user.getAge()+1);
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
tx.commit();
session.close();
性能与空间的问题时,,,要以性能为主..这也就是说要牺牲空间
所以程序最好跳过Hibernate API 而直接通过JDBC API来执来
Session session=SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn =session.connection();
PreparedStatement pstmt = conn.prepareStatement("update users set age=age+1 "+"where age >0");
pstmt.executeUpdate();
tx.commit();
以创建存储过程,,用底层的数据库运行..这样性能好,速度快....
UserUpdate的存储过程代码:
create or replace procadure UserUpdate(u_age in number) as
begin
update users set age=age+1 where age>u_age;
end;
下面的是在程序中如何调用我们命名的存储过程
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn=session.connection();
String str="{call UserUpdate(?)}";
CallableStatement cstmt= conn.prepareCall(str);
cstmt.setInt(1,0);
cstmt.executeUpdate();
tx.commit(); 注意.开源的MySQL中不支持存储过程的..
这样以上的3次性能优化,从hibernate到jdbc再到本地化数据库存储过程。逐步优化。
执行的更快。