Criteria的休眠映射问题
|
当我执行以下代码时:
String sqlQuery = \"SELECT {msg.*}, {cmd.*} \" +
\"FROM schemaName.Messages AS msg \" +
\"LEFT OUTER JOIN schemaName.send_commands AS cmd \" +
\" ON cmd.message_key = msg.unique_key \" +
\" AND ( cmd.priority = 1 ) \" +
\"WHERE msg.sequence_received < 10\";
Query query = session.createSQLQuery( sqlQuery )
.addEntity( \"msg\",Messages.class )
.addJoin( \"cmd\",\"msg.commands\" )
.addJoin( \"msg\", \"cmd.message\" );
query.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY );
我获得了正确的resultSet:以ѭ1,不会发出额外的SQL查询的方式加载所有消息,并加载某些SendCommands。因此,我需要的所有信息均已获取并正确映射。
但是,以下代码有问题:
Criteria crit = session.createCriteria( Messages.class )
.add( Restrictions.lt( \"sequenceReceived\", Long.valueOf( 10 )) )
.setFetchMode( \"commands\", FetchMode.JOIN )
.createAlias( \"commands\", \"cmd\", Criteria.LEFT_JOIN, Restrictions.eq( \"cmd.priority\", 1 ) )
.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY );
,hibernate设法生成正确的SQL代码:
SELECT [...]
FROM schemaName.Messages AS msg LEFT OUTER JOIN schemaName.send_commands AS cmd
ON cmd.message_key = msg.unique_key AND ( cmd.priority = 1 )
WHERE msg.sequence_received < 10
问题是当我尝试使用ѭ1时,Hibernate发出一个新的SQL查询并获取与给定Message相关的sendCommands。有没有办法修复映射,或有实际的渴望获取?
没有找到相关结果
已邀请:
0 个回复