2016-02-16 40 views
0

我使用hibernate和Apache mina一起構建多人遊戲服務器。我爲每個(apache mina)客戶端分開客戶端類,單獨的事務和會話。
所以,問題是:休眠鎖定主線程嗎?

是否冬眠塊我的主線程,當我救了我的實體數據庫或進行巨大的選擇查詢?

+0

「塊」和「鎖」是兩個非常不同的東西。你問哪個? – markspace

+0

我的意思是鎖定我的想法。我不想在同步播放器動作時有任何延遲 –

回答

0

是的,你的JDBC調用是同步的,所以它們會阻塞,直到從數據庫返回一些東西,這不是Hibernate特有的。

您可以創建一個單獨的線程並使用它來處理數據庫操作。儘管你會遇到跨線程共享實體的問題,比如提取懶惰關係,但請注意。

+0

哇。嚴重的是,Hibernate中存在跨線程共享實體的問題?可以指出關於這方面的文檔嗎? – markspace

+0

@markspace會話不是線程安全的,儘管重新連接實體並非不可能。對於您不關心結果的寫入操作,您不會遇到問題。 https://pveentjer.wordpress.com/2007/02/19/sharing-hibernate-entities-between-threads/,http://stackoverflow.com/questions/32549386/modifying-hibernate-entities-from-multiple-threads – francis