如何解决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。有没有办法修复映射,或有实际的渴望获取?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。