Hibernate奇怪的createAlias行为

时间:2011-06-15 17:35:32

标签: java hibernate mapping

我从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,它产生了相同的行为。

0 个答案:

没有答案