Persistência em Java
Nos últimos anos, acumulei experiência no campo da abstração de persistência em Java, usando conceitos como EJB 2.0, Hibernate, JPA e outros desenvolvidos em casa. Eles me pareciam ter uma curva de aprendizado acentuada e muita complexidade. Além disso, como grande fã do SQL, também pensei que muitos modelos de abstração fornecem muita abstração sobre o SQL, criando conceitos como "critérios", "predicados", "restrições" que são conceitos muito bons, mas não o SQL.
A idéia geral de abstração de persistência em Java parece basear-se no modelo Objeto-relacional, em que o RDBMS é de alguma forma compatível com o mundo OO. O debate sobre ORM sempre foi emocional, pois parece não existir uma solução única que seja adequada a todos - se é que essa solução pode existir.
jOOQ
Minha preferência pessoal de como evitar problemas relacionados ao ORM é manter o mundo relacional. Agora, a escolha do paradigma do modelo de dados não deve ser o tópico de discussão, pois é uma preferência pessoal ou uma questão de qual modelo de dados melhor se adapte a um problema concreto. A discussão que eu gostaria de iniciar é sobre a minha própria ferramenta de persistência chamada jOOQ . Eu projetei o jOOQ para fornecer a maioria das vantagens das modernas ferramentas de persistência:
- Uma linguagem específica de domínio baseada em SQL
- Geração de código-fonte mapeando o esquema do banco de dados subjacente para Java
- Suporte para muitos RDBMS
Adicionando alguns recursos que poucas ferramentas modernas de persistência possuem (me corrija se estiver errado):
- Suporte para SQL complexo - uniões, seleções aninhadas, junções automáticas, alias, cláusulas de caso, expressões aritméticas
- Suporte para SQL não padrão - procedimentos armazenados, UDT, ENUMS, funções nativas, funções analíticas
Por favor, considere a página da documentação para obter mais detalhes: http://www.jooq.org/learn.php . Você verá que uma abordagem muito semelhante é implementada no Linq para C #, embora o Linq não tenha sido projetado exclusivamente para SQL.
A questão
Agora, tendo dito que sou um grande fã de SQL, me pergunto se outros desenvolvedores compartilharão meu entusiasmo pelo jOOQ (ou Linq). Esse tipo de abordagem para abstração de persistência é viável? Quais são as vantagens / desvantagens que você pode ver? Como eu poderia melhorar o jOOQ e o que está faltando na sua opinião? Onde eu errei, conceitualmente ou praticamente?
Respostas críticas, mas construtivas, apreciadas
Entendo que o debate é emocional. Existem muitas ferramentas excelentes por aí que já fazem coisas semelhantes. O que me interessa é um feedback crítico, mas construtivo, com base em sua própria experiência ou artigos que você possa ter lido.