List<User> users = findAllUser();
for(User u : users) {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
tx.commit();
s.close();
}都必须在for语句里面吗?
for(User u : users) {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
tx.commit();
s.close();
}都必须在for语句里面吗?
解决方案 »
- Ext+dwr+hibernate+spring如何删除复选框选中数据
- 求一个正则表达式
- 用过LazyValidatorForm的朋友帮忙,使用 LazyValidatorForm 验证多文件上载异常。
- 邮箱有新邮件提示信息的疑问?
- struts遇到的一个问题
- 各位过来人,小第毕业一年了,关于方向的问题,请各位大哥请进!。。。。。。。。。。。
- 关于struts-config.xml 中的action-mappings 的疑问??
- SOS:菜鸟提问--类的多态性出现的错误?
- jbuilderX&&Struts1.1结合使用时为什么会提示读取xml文件错误??
- 类的包容
- F5负载均衡的cookie问题
- javascript疑问
这里放在for循环里是每次增加数据都重新创建一次session,然后关闭session。完全没有必要这样做,放在外面完全ok。
Session s = HibernateSessionFactory.getSession();
List<User> users = findAllUser();
for(User u : users) {
Transaction tx = s.beginTransaction();
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
tx.commit();
s.close();
}
session可以理解成客户端和数据库的一次会话,多个事物可以含在这次会话中。
一般在多用户场景下,我们会封装一下把session交给数据库连接池(百度一下数据库连接池)去管理。
成熟的数据库连接池很多,比如c3p0等等。
下面把多个用户保存作为一个事物来处理(如果其中任何一个用户保存失败,则抛出异常,之前的用户也不会保存成功,保证事物的完整性,如果你不在乎事物,则可以把tx放到循环中处理) Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
List<User> users = findAllUser();
for(User u : users) {
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
}
tx.commit();
s.close();
List<User> users = findAllUser();
for(User u : users) {
Transaction tx = s.beginTransaction();
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
tx.commit();
s.close();
}
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.beginTransaction();
List<User> users = findAllUser();
for(User u : users) {
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
}
tx.commit();
s.close();
Session s = HibernateSessionFactory.getSession()
Transaction tx = s.beginTransaction();
List<User> users = findAllUser();
for(User u : users) {
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
}
tx.commit();
s.close();
相当于你每次循环都要处理事务。
List<User> users = findAllUser();
Transaction tx = s.beginTransaction();
for (User u : users) {
s.clear();
System.out.println(u.getName());
s.save(new Info(null, msg, u, false, new Date(), from));
}
tx.commit();
s.close();不是更好?
如果你只是查询的话,开不开事务都是可以的。