首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

这样创建session对不对?该如何处理

2012-04-26 
这样创建session对不对?Java codeListUser users findAllUser()for(User u : users) {Session s Hi

这样创建session对不对?

Java code
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语句里面吗?

[解决办法]
不需要啊。session是指跟数据库的一次会话。这次会话可能会包含很多操作


[解决办法]
不需要再for循环里,你把session放在for循环外也可以,至于session的创建有多种方式创建。
这里放在for循环里是每次增加数据都重新创建一次session,然后关闭session。完全没有必要这样做,放在外面完全ok。
[解决办法]
Java code
 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();        }
[解决办法]
正解哇
[解决办法]
楼主要好好理解Hibernate中session的含义,知其所以然,自然就知道在什么场合下如何处理对象了。
session可以理解成客户端和数据库的一次会话,多个事物可以含在这次会话中。
一般在多用户场景下,我们会封装一下把session交给数据库连接池(百度一下数据库连接池)去管理。
成熟的数据库连接池很多,比如c3p0等等。
下面把多个用户保存作为一个事物来处理(如果其中任何一个用户保存失败,则抛出异常,之前的用户也不会保存成功,保证事物的完整性,如果你不在乎事物,则可以把tx放到循环中处理)
Java code
 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();
[解决办法]
一个就够了
Java code
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();        }
[解决办法]
一个就够,使用前连接,使用后关闭。不需要每次都打开关闭,这样耗时耗存
Java code
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就够了,一级缓存,不需要创建那么多次,放在for外面,开启事务根据你的代码,里外都可以放的
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();
[解决办法]
事务别放在for each 里就行了
相当于你每次循环都要处理事务。

[解决办法]
Session s = HibernateSessionFactory.getSession();
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();

不是更好?
[解决办法]
session只用开启一个,然后你再进行持久层的操作就可以了。
如果你只是查询的话,开不开事务都是可以的。

热点排行