2011-01-12 12 views
8

Ho un'applicazione Spring 3 + JPA 2.0. Nel mio @Controller ho bisogno di un oggetto inizializzato, ma ho i proxy, devo essere in grado di inizializzarlo a livello di programmazione. Ho bisogno di funzionalità simili a org.hibernate.Hibernate.initialize(Object).Come forzare l'inizializzazione di un proxy JPA Hibernate per usarlo in una chiamata JSON

Qualcuno può aiutare. L'oggetto è utilizzato per le operazioni AJAX. Se le proprietà sono proxy, non posso inviarlo come JSON

risposta

4

Nessuna opzione JPA a mia conoscenza. Dovresti usare Hibernate.initialize(..).

In effetti, quando ho dato un'occhiata all'implementazione di ibernazione, le raccolte pigre sembrano essere inizializzate in molti casi che non ci si aspetterebbe. Come entityManager.contains(..) e Persistence.getPersistenceUtil().isLoaded(...). Fai una prova, ma non penso che dovresti fare affidamento su dettagli di implementazione di questo tipo.

+0

Sì, grazie, anche se questo potrebbe essere stato il caso. Non volevo creare oggetti aggiuntivi e quindi inviarlo alla vista. Dato che siamo ancora all'inizio del progetto, abbiamo deciso di trasferirci in letargo poiché i motivi dell'APP non si sono attenuti :). Ora per tutti gli utenti in letargo basta usare 'Hibernate.initialise (..)' – pmanolov

0

Stiamo facendo una cosa simile nella nostra applicazione e abbiamo trovato utile dividere i nostri oggetti di entità di database e avere un altro gruppo di classi per l'output JSON.

Se stai usando un quadro JSON che appena ispeziona l'oggetto e mandrini alcuni JSON per ciascuno e per ogni proprietà sull'oggetto quindi essere in grado di avere oggetti come:

PersonEntity - Classe gestito da JPA e PersonJsonOutput - Classe specificatamente progettata per l'uscita JSON

Potrebbe essere più sicuro a lungo termine. Ciò consente di disporre di modifiche al database che non si riflettono automaticamente nel servizio JSON, è possibile che si desideri eseguire la versione del servizio JSON, piuttosto che interrompere le vecchie versioni non appena l'entità del database cambia.

Vi dà anche un maggiore controllo della vostra uscita JSON in termini di Say formati di data o numeri di espulsione in database per essere stringhe nel vostro JSON, ecc ...

Questa risposta in realtà solo dipende da come si' ri generare il tuo JSON, ma sembra che la tua libreria faccia qualche introspezione.

0

So che è tardi e la risposta è stata accettata, ma un altro modo standard JPA è quello di chiamare il metodo size() nella lista che si desidera inizializzare prima di restituire l'oggetto dal DAO:

Object.getList().size(); 

Questo ti evita di dover imbrogliare e utilizzare un meccanismo specifico di implementazione per l'inizializzazione

Problemi correlati