我是一個(gè)初學(xué)者. 我建了一個(gè)classes表和一個(gè)students表,表示班級(jí)和學(xué)生,其中學(xué)生里面有一個(gè)外鍵關(guān)聯(lián)到班級(jí)表. 然后學(xué)生類里面建了一個(gè)classes的屬性, 用session取出學(xué)生后,如果關(guān)閉session的話,就無(wú)法讀取到學(xué)生類里的classes值,沒(méi)有關(guān)閉就能讀取到. 請(qǐng)問(wèn)這個(gè)session會(huì)不會(huì)影響到其他用戶的訪問(wèn)呢? 就是說(shuō)如果有兩個(gè)用戶并行操作數(shù)據(jù)庫(kù)的話,一個(gè)用戶的session不關(guān)閉影不影響另一個(gè)用戶呢?
J2EE中最大的一個(gè)觀念就是分層..
session是持久層的東東.不可竄到別的層..
你的這個(gè)問(wèn)題其實(shí)就是延遲加載的問(wèn)題.
從理論的角度講,最好是用一個(gè)就關(guān)一個(gè).防止資源消耗.
但由于hibernate中的延遲加載,所以出現(xiàn)了你的關(guān)閉session的話,就無(wú)法讀取到學(xué)生類里的classes值問(wèn)題.
這個(gè)問(wèn)題可以用Hibernate.initialize()來(lái)解決.也可就使用opensessionview的方式.spring中提供了這樣的filter
不知道這在使用中有沒(méi)有使用spring.用了就比較方便,也不會(huì)出現(xiàn)你所說(shuō)的
引用
一個(gè)用戶的session不關(guān)閉影不影響另一個(gè)用戶
因?yàn)閟ession由spring來(lái)管理,很安全,不會(huì)出現(xiàn)這個(gè)種并發(fā)問(wèn)題. 如果只是使用了Hibernate的話,那得注意了.你在servlet中直接創(chuàng)建session就可能出現(xiàn)并發(fā)問(wèn)題,因?yàn)閟ession不是線程安全的,而servlet是多線程的. 這時(shí)可以使用ThreadLocal來(lái)解決這個(gè)問(wèn)題. 希望對(duì)你有所幫助!