2016-07-04 24 views
4

ich eine benutzerdefinierte Eigenschaft in einem persistenten cfc habe, die wie folgt aussieht:Coldfusion ORM, Hibernate - Abrufen von neuestem Rekord für One-to-many-Feld

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" 
; 

Die Absicht ist es, die Akkreditierungs Aufzeichnungen zu verbinden, welche sind eins-zu-viele und rufen nur die neueste ab. Das Problem ist, dass es nicht funktioniert.

Wie in normalen PL_SQL wird das rownum vor der Sortierung ausgewertet, daher bekomme ich nicht die neueste Aufzeichnung.

Die Lösung für diese in normalen PL-SQL ist eine zu tun, wie diese Unter wählen, so dass wir die Datensätze zuerst und dann die Top-Datensatz auswählen:

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 

Also meine Frage ist, wie erreiche ich dieses Ergebnis in meiner cfc-Eigenschaft?

Antwort

3

fand ich eine Abhilfe:

// 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')); 
} 

nicht so schön, aber effektiv.