Persistencia en Java
En los últimos años, he acumulado experiencia en el campo de la abstracción de persistencia en Java, utilizando conceptos como EJB 2.0, Hibernate, JPA y los propios. Me parecieron tener una curva de aprendizaje empinada y mucha complejidad. Además, como gran fanático de SQL, también pensé que muchos modelos de abstracción proporcionan demasiada abstracción sobre SQL, creando conceptos como "criterios", "predicados", "restricciones" que son conceptos muy buenos, pero no SQL.
La idea general de la abstracción de persistencia en Java parece estar basada en el modelo relacional de objetos, donde RDBMS de alguna manera coincide con el mundo OO. El debate ORM siempre ha sido emotivo, ya que no parece existir una solución única que se adapte a todos, incluso si tal solución puede existir.
jOOQ
Mi preferencia personal de cómo evitar problemas relacionados con ORM es apegarme al mundo relacional. Ahora, la elección del paradigma del modelo de datos no debe ser el tema de discusión, ya que es una preferencia personal o una cuestión de qué modelo de datos se adapta mejor a un problema concreto. La discusión que me gustaría comenzar es sobre mi propia herramienta de persistencia llamada jOOQ . Diseñé jOOQ para proporcionar la mayoría de las ventajas que tienen las herramientas modernas de persistencia:
- Un lenguaje específico de dominio basado en SQL
- Generación de código fuente que asigna el esquema de base de datos subyacente a Java
- Soporte para muchos RDBMS
Agregar algunas características que tienen pocas herramientas modernas de persistencia (corríjame si me equivoco):
- Soporte para SQL complejo: uniones, selecciones anidadas, autouniones, alias, cláusulas de caso, expresiones aritméticas
- Soporte para SQL no estándar: procedimientos almacenados, UDT, ENUMS, funciones nativas, funciones analíticas
Considere la página de documentación para más detalles: http://www.jooq.org/learn.php . Verá que se implementa un enfoque muy similar en Linq para C #, aunque Linq no está diseñado exclusivamente para SQL.
La pregunta
Ahora, habiendo dicho que soy un gran admirador de SQL, me pregunto si otros desarrolladores compartirán mi entusiasmo por jOOQ (o Linq). ¿Es este tipo de enfoque para la abstracción de persistencia viable? ¿Cuáles son las ventajas / desventajas que puede ver? ¿Cómo podría mejorar jOOQ, y lo que falta en tu opinión? ¿Dónde me equivoqué, conceptual o prácticamente?
Respuestas críticas pero constructivas apreciadas
Entiendo que el debate es emocional. Existen muchas herramientas excelentes que ya hacen cosas similares. Lo que me interesa es comentarios críticos pero constructivos, basados en su propia experiencia o artículos que haya leído.