Come lavorare con oggetto indipendente in CF9?
-
09-10-2019 - |
Domanda
Se User
è un'entità, e ho bisogno di memorizzare User
in Session
, sarà indipendente su richiesta successiva.
Per quanto ne sappia non ci sei solo 2 metodi per gestire questi oggetti indipendenti
-
EntityMerge(session.user)
- aggiornamento DB con l'oggetto della sessione (non sicuro) -
session.userID
-entityLoadByPK()
nuovo sulla richiesta successiva (più carico)
Sono questi gli unici 2 soluzioni alternative? Eventuali altri modi?
Secondo Tecniche avanzate con ColdFusion 9 ORM Integrazione scorrere Deck concorrenza con il metodo # 1 si gettano errore se un'entità è stato modificato il merge, ma come questo è utile? catturare il metodo eccezione e l'uso # 2?
Quando usare EntityReload()
? Ho pensato che funziona allo stesso modo come EntityMerge(entity)
ma non è così.
Grazie!
Soluzione
Io tendo a memorizzare solo l'ID dell'utente che ha effettuato l'accesso a nella sessione.
Poi ho un metodo di facciata UserService.getCurrentUser (), che restituisce l'utente se ne ho bisogno.
In questo modo l'utente è sempre attuale, e mai distaccato.
Altri suggerimenti
Io in genere basta usare un oggetto proxy leggero (che contiene solo le proprietà di livello superiore) in seduta e caricare solo l'entità completa, se necessario esattamente nello stesso caso d'uso come hai descritto. Non utilizzare il metodo # 1 a meno che non si vuole veramente scottarsi (esperienza di parlare lì).
sessioni Hibernate sono pigri caricati, e non persistono. Così, mentre si ha l'oggetto in memoria CF, che stanno puntando ad una sessione Hibernate che è fuori portata, per la mancanza di una terminologia migliore. Per tornare nel campo di applicazione, che, fondamentalmente bisogno di svegliarlo alle vostre richieste successive, usando qualcosa come EntitySave () o EntityLoadByExample ()
Sono d'accordo che wrapping in un servizio non solo consente di evitare alcuni di questi problemi, ma nel complesso è meglio punto di vista architettonico che toccare direttamente l'entità.