Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带条件的Hibernate映射问题_Hibernate_Join_Mapping_Nhibernate Mapping_Criteria - Fatal编程技术网

带条件的Hibernate映射问题

带条件的Hibernate映射问题,hibernate,join,mapping,nhibernate-mapping,criteria,Hibernate,Join,Mapping,Nhibernate Mapping,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 m

当我执行以下代码时:

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 );
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
选择[…]
从schemaName.Messages作为msg LEFT OUTER加入schemaName.send_命令作为cmd
在cmd.message_key=msg.unique_key和(cmd.priority=1)上
其中,msg.sequence_的接收值小于10

问题是,当我尝试使用
msg.getCommands()
时,Hibernate会发出一个新的SQL查询并获取与给定消息关联的sendCommands。有没有办法修复映射或进行实际的快速获取?

您是否尝试过
FetchMode.Eager
或删除了
.setFetchMode(“命令”,FetchMode.JOIN)
?使用createalias it时应该获取命令hinkI希望默认值为lazy,但我希望它在运行时被owerwrite。我尝试删除
.setFetchMode(“commands”,FetchMode.JOIN)
但没有成功。您能否在运行时使用所需的FetchMode动态构造条件查询?