2010-02-25 10 views
5

Stiamo valutando soluzioni ORM per il mio progetto che ha stretto accoppiamento tra livello aziendale e datalayer (JDBC). Ho iniziato a fare un PoC con Cayenne. Il mio requisito va come questo a) Già esiste lo schema del database b) Lo schema è un livello molto granulare. Cioè gli oggetti java in tempo reale sono derivati ​​solo dalla combinazione di tabelle. c) Al momento voglio solo per eseguire un'operazione di lettura (per essere filtro preciso e ordinare in un elenco per criteri inputing)La cayenne è una buona scelta per il mio fabbisogno?

Fino ad ora, le osservazioni che ho fatto con Caienna sono 1) Tavolo e Gli Oggetti sono accoppiati. Modeler non consente di creare oggetti java senza tabella associata. 2) Non riuscivo a trovare un modo semplice per mappare l'output di una query denominata su un oggetto java in modo da ottenere l'elenco in un modo in cui l'applicazione ha bisogno. 3) Inoltre non sono sicuro che le espressioni lavorino con le query denominate.

Mi piacerebbe conoscere i vostri input sulla scelta migliore per il mio requisito?

Grazie in anticipo.

risposta

5

Se dovessi scegliere uno strumento ORM o un provider JPA, non sarebbe Cayenne semplicemente perché non sembra essere ampiamente utilizzato, quindi la comunità dietro di esso non è molto grande e questa è una preoccupazione. Non c'è quindi bisogno di discutere punti tecnici, cose come Cayenne 2.0 è invadente, devi implementare un'interfaccia o estendere una superclasse (Cayenne 3.0 ha il supporto POJO ma è ancora in beta, dopo più di 2 anni ...). No, davvero, non vedo alcuna buona ragione per non scegliere Hibernate, lo standard de facto, se hai bisogno di uno strumento ORM.

Ma ...

Dato le vostre esigenze, un ORM potrebbe in realtà non essere la scelta migliore, a causa della mosty b) quindi vorrei considerare l'utilizzo di iBatis (che non è un mapper O/R, è un dato mapper).

+0

Grazie per la risposta. Considereremo la tua raccomandazione. Il requisito I mentioend era un inizio. In futuro potremmo aver bisogno di funzionalità ORM complete. – Sudheer

4

Cayenne ha un sacco di funzioni molto buone, e sul lato positivo c'è un numero di strumenti open source da utilizzare nel progetto. Hibernate è adatto ad alcune persone e ad altri Cayenne. So che per uso personale, Cayenne era di gran lunga superiore a Hibernate a causa principalmente di questi fattori:

  • una comunità di utenti molto utile. L'ibernazione può essere un po 'abrasiva.
  • una base di codice molto robusta con un gran numero di test che forniscono un'ampia copertura del codice
  • Supporto ROP (tre livelli). Questo di per sé è una caratteristica enorme se ne hai bisogno.
  • buon supporto eredità
  • Cayenne modellatore

Sì, l'approccio Cayenne è che le entità oggetto (il client Java che mappano al db) si estendono una superclasse. Ciò offre alcuni vantaggi distinti rispetto a Hibernate (Cayenne controlla l'intero ciclo di vita dell'oggetto) e introduce complessità per alcune persone.

Inoltre, trovo molto intuitivo il modo in cui Cayenne gestisce il contesto (un gruppo di oggetti e modifiche che verranno successivamente impegnati insieme).

Per quanto riguarda le vostre domande:

1) Cayenne consente sicuramente creare entità oggetto senza una mappa uno-a-uno ad un tavolo. Lo facciamo sempre, soprattutto quando modelliamo l'ereditarietà.

2) SQLTemplate consente di ottenere query con nome, ma scoprirete che la maggior parte degli ORM vi allontanerà da questo approccio poiché state lavorando contro il modo naturale in cui un ORM lavora per creare query direttamente nel database. Il punto è di astrarre il database ogni volta che è possibile.

3) SQLTemplate ti consente di fare tutto ciò che desideri. Ma ancora una volta, l'adozione di un ORM riguarda una strategia per scrivere la tua applicazione, non solo un involucro leggero per JDBC. Credo che i benefici siano enormi e che i nostri progetti abbiano beneficiato, ma dipende dai tuoi obiettivi.

0

Concordato, Cayenne ha molte caratteristiche molto buone. Ma se il tuo progetto ha bisogno di un lavoro fatto con l'ereditarietà (non lo hai menzionato), in definitiva Cayenne non è un'opzione. Non fa un "buon supporto ereditario":

Orizzontale - https://issues.apache.org/jira/browse/CAY-795 -open dal 30/Mag/07; discussione Vertical-inheritance su http://cayenne.195.n3.nabble.com/Vertical-inheritance-td827636.html dal 18/mag/2010

Lo uso spesso nei miei progetti personali e l'aumento di produttività è eccellente.

Problemi correlati