2016-07-04 42 views
4

我在持久CFC看起來像這樣有一個自定義屬性檢索最新記錄:ColdFusion的ORM,休眠 - 一到多場

property name="last_live_request" 
     fieldtype="one-to-many" 
     cfc="Accreditation" 
     fkcolumn="pers_ky" 
     setter="false" 
     orderby="ACCR_KY desc" 
     where="status_doma_ky in (27,28) and rownum = 1" 
; 

的意圖是加入到認證記錄,這是一對多的,並且只檢索最近的一個。問題是它不起作用。

和普通的PL_SQL一樣,rownum在排序之前被評估,因此我沒有得到最新的記錄。

普通PL-SQL對此的解決辦法是做一個子選擇這個樣子,讓我們得到了記錄,然後再選擇上面記錄着:

select * 
    from (
     select * 
     from JOU_V_REV_PEACC 
     where status_doma_ky in (27,28) 
     and pers_ky = [nnn] 
     order by ACCR_KY desc 
    ) 
    where rownum = 1 

所以我的問題是,如何我在我的cfc屬性中實現這個結果?

回答

3

我找到了一個解決辦法:

// Get the max id using the formula attribute (note, requires SQL, not HQL) 
property name="LAST_LIVE_ACCR_KY" setter="false" formula=" 
    select max(peac.accr_ky) 
    from JOU_V_REV_PEACC peac 
    where peac.status_doma_ky in (27,28) 
    and peac.pers_ky = PERS_KY 
"; 

// Set up the property 
property name="last_live_request" persistent="false" default=""; 

// Load the required Accreditation using a custom function 
function getlast_live_request() { 
    return entityLoadByPK("Accreditation", this.attr('LAST_LIVE_ACCR_KY')); 
} 

不那麼漂亮,但有效。