2017-08-09 57 views
0

我有一个使用Hibernate OGM框架和Mongo数据库的Java应用程序。当我检索大量数据时,应用程序变得非常缓慢,其中一个瓶颈就是Hibernate。Hibernate OGM - MongoDB:如何以只读模式检索数据以提高性能

我在只读环境中读取回放数据可以提高性能。我怎样才能做到这一点?

我有方法尝试调用这样的:

entityManager.lock(entity, LockModeType.READ); 

或:

entityManager.createNativeQuery(query, entity) 
.setLockMode(LockModeType.READ) 
.getResultList(); 

,但似乎也有不支持的。

我不能等20分钟几兆字节。请帮忙! 每一个建议表示赞赏

在我的情况下,我有一个一对多的关联树。查询位于根目录,其中提取设置为LAZY。 然后我在一个线程调用Hibernate.initialize(代理)方法在第二级恢复是EAGER,到更深层次。

+0

也许你可以用更多的细节描述你的用例? – Davide

回答

0

有了可以使用查询实体管理器提示:

em.createNativeQuery(query) 
    .setHint("org.hibernate.readOnly", true) 
    .getResultList(); 

,或者您可以使用会话:

em.unwrap(OgmSession.class) 
    .createNativeQuery(query) 
    .setReadOnly(true) 
    .list(); 

请注意,如果您可以添加有关的问题的性质更多的细节和如果这是Hibernate OGM中的问题,我们可能会为它创建一个补丁。

+0

非常感谢。 我已经尝试了两种方式,但等待时间仍然很长。 也许我错了吗?我在关联链中的最高表上进行了查询。 –

+0

如果您可以为我们创建一个测试来运行,我们可以帮助您更多。你的问题是关于启用只读模式,所以我认为答案是正确的。如果你的问题对于stackoverflow来说过于通用,你可以使用hibernate论坛:https://forum.hibernate.org/viewforum.php?f=31 – Davide