2010-02-25 6 views
5

Estamos evaluando las soluciones ORM para mi proyecto que tiene un acoplamiento estrecho entre la capa empresarial y la capa de datos (JDBC). Empecé a hacer un PoC con Cayenne. Mi requisito es el siguiente a) Ya existe el esquema de la base de datos b) El esquema es de nivel muy granular. Es decir. los objetos java en tiempo real solo se obtienen combinando tablas. c) Por el momento sólo quiero realizar la operación de lectura (para ser filtro precisa y clasificar en una lista de criterios inputing)¿Es Cayena una buena opción para mi requerimiento?

Hasta ahora, las observaciones que he hecho con el Cayenne están 1) Mesa y objetos están estrechamente acoplado. Modeler no permite crear objetos java sin tablas asociadas. 2) No pude encontrar una manera fácil de asignar la salida de una consulta con nombre a un objeto java para que yo pueda obtener la lista de una manera que la aplicación necesite. 3) Tampoco estoy seguro de que las expresiones funcionen con consultas con nombre.

Me gustaría conocer sus entradas en la mejor opción para mi requerimiento?

Gracias de antemano.

Respuesta

5

Si tuviera que elegir una herramienta ORM o un proveedor JPA, no sería Cayenne simplemente porque no parece ser ampliamente utilizado, por lo que la comunidad detrás de él no es muy grande y esto es una preocupación. Por lo tanto, no es necesario discutir puntos técnicos, cosas como Cayenne 2.0 es intrusivo, tiene que implementar una interfaz o ampliar una superclase (Cayenne 3.0 tiene soporte POJO pero aún está en versión beta, después de más de 2 años ...). No, realmente, no veo ninguna buena razón para no elegir Hibernate, el estándar de facto, si necesita una herramienta ORM.

Pero ...

Teniendo en cuenta sus necesidades, un ORM en realidad podría no ser la mejor opción, debido a mosty b) por lo que podría considerar el uso de iBatis (que no es un asignador de O/R, es un dato mapeador) en su lugar.

+0

Gracias por su respuesta. Consideraremos su recomendación. El requisito que mencioné fue un comienzo. De ahora en adelante, es posible que necesitemos características completas de ORM. – Sudheer

4

Cayenne tiene muchas características muy buenas, y en el lado positivo tiene una serie de herramientas de código abierto para usar en su proyecto. Hibernate se adapta a algunas personas y otras a Cayenne. Sé que para un uso más propio, Cayenne fue muy superior a Hibernate debido principalmente a estos factores:

  • Una comunidad de usuarios muy útil. Hibernate puede ser un poco abrasivo.
  • una base de código muy robusta con una gran cantidad de pruebas que proporcionan una gran cobertura de código
  • soporte ROP (tres niveles). Esto en sí mismo es una gran característica si lo necesita.
  • buen apoyo herencia
  • Cayenne modelador

Sí, el enfoque de Cayena es que las Entidades del objeto (los clientes de Java, que se asignan a la db) se extienden una superclase. Eso le da algunas ventajas claras sobre Hibernate (Cayenne controla todo el ciclo de vida del objeto) e introduce complejidades para algunas personas.

También encuentro la manera en que Cayenne maneja el Contexto (un grupo de objetos y cambios que luego se comprometerán juntos) para ser muy intuitivo.

En cuanto a sus preguntas:

1) Cayena definitivamente le permite crear entidades objeto sin un mapa uno a uno a una mesa. Lo hacemos todo el tiempo, particularmente cuando modelamos la herencia.

2) SQLTemplate le permitirá obtener consultas con nombre, pero encontrará que la mayoría de los ORM le alejarán de este enfoque ya que está trabajando en contra de la forma natural en que un ORM crea consultas directamente en la base de datos. El objetivo es abstraer la base de datos siempre que sea posible.

3) SQLTemplate le permitirá hacer casi cualquier cosa que desee. Pero, una vez más, adoptar un ORM se trata de una estrategia para escribir su aplicación, no solo una envoltura ligera para JDBC. Creo que los beneficios son enormes y nuestros proyectos se han beneficiado, pero depende de sus objetivos.

0

De acuerdo, Cayenne tiene muchas características muy buenas. Pero si su proyecto necesita un trabajo hecho con herencia (no lo mencionó), definitivamente Cayenne no es una opción. No hace un "buen soporte de herencia":

Herencia horizontal - https://issues.apache.org/jira/browse/CAY-795 -abierta desde el 30/mayo/07; debate Herencia vertical en http://cayenne.195.n3.nabble.com/Vertical-inheritance-td827636.html desde 18/mayo/2010

A menudo lo uso en mis proyectos personales y la ganancia en productividad es excelente.

Cuestiones relacionadas