我有桌子:
PROCESSES STEP_STATUSES STEPS
--------- ------------- -----------
PROC_ID STAT_ID STEP_ID
PROC_NAME NAME STEP_NUMBER
... STEP_NAME
...
STAT_ID
PROC_ID
有什么方法可以将 Processes 表映射到 NHibernate 中,并带有 CurrentStep 属性(这是一个映射的 STEPS 表行)?
我几乎可以用映射做我需要的事情:
<many-to-one name="CurrentStep" formula="(
select t.step_id
from STEPS t
where PROC_ID = t.PROC_ID
and STEP_NUMBER = nvl((select max(STEP_NUMBER), PROC_ID from STEPS where STAT_ID > 0 and PROC_ID = t.PROC_ID),
(select min(STEP_NUMBER), PROC_ID from STEPS where STAT_ID = 0 and PROC_ID = t.PROC_ID))
)"/>
但是我不能为这个字段设置 fetch="join",我想用一个查询来获取所有数据,连同 CurrentStep 属性值——像这样:
select t.*, st.*
from PROCESSES t
left outer join (
select STEP_ID, PROC_ID
from STEPS s1
where STEP_NUMBER = nvl((select max(STEP_NUMBER) from STEPS where STAT_ID > 0 and PROC_ID = s1.PROC_ID),
(select min(STEP_NUMBER) from STEPS where STAT_ID = 0 and PROC_ID = s1.PROC_ID))
) s on s.PROC_ID = t.PROC_ID
left outer join STEPS st on st.PROC_ID = s.PROC_ID and st.STEP_ID = s.STEP_ID
这是必要的,因为性能。
所以,问题ID:
- 有没有办法为这样一个复杂的公式字段设置 fetch="join" ?
- 有没有办法加入这样一个复杂的子查询?
- 如果无法设置映射,有什么方法可以创建 ICriteria 来获得这样的查询结果?
如果问题不清楚,我很抱歉,如果出现任何问题,我会尽力澄清/