2010-01-26 14 views
6

Il mio ambiente di lavoro corrente utilizza il mix standard Spring/Hibernate/JSP per servire il contenuto al proprio client Flex tramite XML. Ci sono molti modi in cui si accede ai dati, ma il più diffuso è tramite chiamate dirette SQL al database e una conversione manuale in XML.Java/Hibernate: come scrivere codice DAO per SQL complessi

Il problema è che con l'aumentare dell'applicazione, le SQL diventano molto più complesse e difficili da mantenere. Come se non fosse abbastanza difficile mantenere gli SQL creati con StringBuilders, ora è anche peggio, che gli SQL siano costruiti dinamicamente usando molte istruzioni if ​​e loop.

So che in genere la strada da percorrere è quella di recuperare gli elementi utilizzando query ed entità di Hibernate. Tuttavia, in alcune delle nostre richieste i risultati non possono essere mappati su una singola entità di Hibernate e temo che sia necessario utilizzare l'SQL diretto.

Quale sarebbe la strada giusta da fare per questo? C'è un modo per rendere più leggibili le query sql dinamiche? C'è un modo per farlo con le entità di Hibernate?

Mi dispiace per la natura astratta di questa domanda. Spero comunque di avere un buon input;)

Apprezzo i tuoi commenti!

risposta

3

HQL supporta query che recuperano più di un'entità. Sono supportati anche i join. Ad esempio:

Quanto sopra restituisce un nuovo oggetto (non entità!) Composto da due entità: prodotto e prezzo Puoi anche usare un List per mettere entità diverse dallo stesso risultato.

Dare this tutorial un thourough leggere.

rendono queste query con parametri dinamici, e utilizzare le classi più appropriati per memorizzarli come @NamedQueries

2

Si potrebbe prendere in considerazione lo spostamento di alcune delle logiche SQL nel database e l'accesso ai dati tramite visualizzazioni: questo presenta i propri problemi, ovviamente (ora si ha la logica di business in due punti), ma potrebbe essere opportuno considerarlo.

+0

Sono un po 'd'accordo qui, anche se a molta gente non piacciono i proc memorizzato e la logica in SQL. Se si dispone di una query SQL davvero complessa, non c'è davvero alcun modo per renderlo più semplice provando a farlo in codice o utilizzando un linguaggio di query meno affidabile come HQL. –

0

Supponendo che non si può fare ciò che è necessario in HQL dare un'occhiata a ibatis Essa vi permetterà di impostare le mappature utilizzando specifiche query SQL e stored procedure. Sarà anche un'altra dipendenza dal tuo progetto, quindi prendilo anche in considerazione.