我想在我的want应用程序中执行一次即时获取。我的映射文件中包含以下内容
<many-to-one name="user" class="com.xyz.beans.User" lazy="false" fetch="join">
<column name="startedBy" />
</many-to-one>
<many-to-one name="participantByParticipant1" class="com.xyz.beans.Participant" lazy="false" fetch="join" cascade="all" >
<column name="participant1" />
</many-to-one>
<many-to-one name="participantByParticipant2" class="com.xyz.beans.Participant" lazy="false" fetch="join" cascade="all">
<column name="participant2" />
</many-to-one>我有一个如下的查询
Query query = session.createQuery("from Post as p order by challenge.createdOn desc");
query.setFirstResult(0);
query.setMaxResults(10);Participand表有一些到其他tables.And的映射,它们的获取策略是相同的,这需要大约2+秒来执行上面的查询,我可以看到由hibernate 1 select查询生成的以下查询,以获取10个帖子20个参与者标签的select查询(因为每个帖子有2个参与者)
1)为什么?为什么它不接受单个连接?
2)我如何优化这一点?现在只接受10条记录的time.The表太多了
发布于 2016-10-07 18:37:49
仅当您直接获取实体时,在映射中设置lazy="false" fetch="join"才有效:
session.get(Post.class, postId);当您执行查询时,您需要显式地声明获取策略。否则,它仍然是懒惰的:
from Post as p left join fetch p.user与往常一样,这条规则有许多变体和例外。你可以在Hibernate文档中找到更多,16.3. Associations and joins。
https://stackoverflow.com/questions/13977741
复制相似问题