我是一个初学者.
我建了一个classes表和一个students表,表示班级和学生,其中学生里面有一个外键关联到班级表.
然后学生类里面建了一个classes的属性,
用session取出学生后,如果关闭session的话,就无法读取到学生类里的classes值,没有关闭就能读取到.
请问这个session会不会影响到其他用户的访问呢?
就是说如果有两个用户并行操作数据库的话,一个用户的session不关闭影不影响另一个用户呢?
J2EE中最大的一个观念就是分层..
session是持久层的东东.不可窜到别的层..
你的这个问题其实就是延迟加载的问题.
从理论的角度讲,最好是用一个就关一个.防止资源消耗.
但由于hibernate中的延迟加载,所以出现了你的关闭session的话,就无法读取到学生类里的classes值问题.
这个问题可以用Hibernate.initialize()来解决.也可就使用opensessionview的方式.spring中提供了这样的filter
不知道这在使用中有没有使用spring.用了就比较方便,也不会出现你所说的
[quote]一个用户的session不关闭影不影响另一个用户[/quote]
因为session由spring来管理,很安全,不会出现这个种并发问题.
如果只是使用了Hibernate的话,那得注意了.你在servlet中直接创建session就可能出现并发问题,因为session不是线程安全的,而servlet是多线程的.
这时可以使用ThreadLocal来解决这个问题.
希望对你有所帮助!
[quote]就是说如果有两个用户并行操作数据库的话,一个用户的session不关闭影不影响另一个用户呢?[/quote]
不会影响其它用户。一个session就相当于一个JDBC中的Connection对象。不关闭是不行的,如果在web环境下你这种关联关系抓取需要配置一下OpenSessionInViewFilter
关于OpenSessionInViewFilter的使用和配置网上很多文章,就不给你贴了!你可以在javaeye中搜索一下!
你这个在取到学生的时候,SESSION关闭之前要把班级进行访问一下(初始化一下)例如:学生.get班级(),SESSION关闭后,班级就可以取到,或者将 当前学生类的BO对应的XML文件HIBERNATE的延迟加载配成FALSE