开发者

Hibernate strange createAlias bahaviour

开发者 https://www.devze.com 2023-03-13 01:24 出处:网络
I\'m getting a very strange behaviour from Hibernate. If I execute the following query, everything works as expected:

I'm getting a very strange behaviour from Hibernate.

If I execute the following query, everything works as expected:

Criteria crit = session.createCriteria( Message.class )
    .add( Restrictions.lt( "sequenceReceived", Long.valueOf( 10 ) ) )                               
    .createAlias( "this.commands", "cmd", CriteriaSpecification.LEFT_JOIN);                        

"works as expected" means that I obtain a resultSet of Message, where Message.commands were eagerly fetched.

However, the following query does NOT work the same way:

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 ) ));

The only change I've added is an extra restriction for the OUTER LEFT JOIN ON clause. Now the generated SQL became

SELECT [...] FROM messages this_ LEFT OUTER JOIN commands cmd1_ ON this_.unique_key=cmd1_.message_key AND cmd1_.priori开发者_如何学Goty = 1 WHERE this_.sequence_received

The problem is that now, the result set still contains Message, but message.commands is fetched lazily.

Why is this happening, and is there a way to force this loading to be happening eagerly?

Note: I have trie createEntity which yielded an identical behaviour.

0

精彩评论

暂无评论...
验证码 换一张
取 消