我从Hibernate得到了一个非常奇怪的行为。
如果我执行以下查询,一切都按预期工作:
Criteria crit = session.createCriteria( Message.class )
.add( Restrictions.lt( "sequenceReceived", Long.valueOf( 10 ) ) )
.createAlias( "this.commands", "cmd", CriteriaSpecification.LEFT_JOIN);
“按预期工作”意味着我获得了Message的resultSet,其中急切地获取了Message.commands。
但是,以下查询的工作方式不同:
Criteria crit = session.createCriteria( Message.class )
.add( Restrictions.lt( "sequenceReceived", Long.valueOf( 10 ) ) )
.createAlias( "this.commands", "cmd", CriteriaSpecification.LEFT_JOIN, Restrictions.eq( "cmd.priority", 1 ) ));
我添加的唯一更改是对OUTER LEFT JOIN ON子句的额外限制。现在生成的SQL变为
SELECT [...] FROM FROM this_ LEFT OUTER JOIN命令cmd1_ ON this_.unique_key = cmd1_.message_key AND cmd1_.priority = 1 在哪里this_.sequence_received
问题是现在,结果集仍然包含Message,但是延迟地提取了message.commands。
为什么会发生这种情况,有没有办法迫使这种加载急切地发生?
注意:我有trie createEntity,它产生了相同的行为。