2016-02-16 39 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