DEV Community

Pascal CESCATO
Pascal CESCATO

Posted on

ORMs vs CTEs: Why Choose When You Can Have Both?

Part 3 of my CTE series wraps up with the real-world challenge: how do you use CTEs when your ORM pretends they don't exist?

The Reality Check

Doctrine (PHP): No .with() method. Nada.
Hibernate (Java): No CTE support in HQL. Zilch.
Eloquent (Laravel): Needs a third-party package.

The Rebels That Get It

Three ORMs actually embrace CTEs:

SQLAlchemy Core: Elegant .cte() method with fluent API
jOOQ: Type-safe SQL DSL with native .with() support
Django 4.2: Finally added native CTE support (better late than never!)

Survival Strategies for "Hostile" ORMs

When stuck with CTE-ignorant ORMs:

  • Repository Pattern: Isolate CTE queries in dedicated classes
  • Database Views: Create views for frequent CTE patterns
  • Hybrid Approach: CTEs for analytics, ORM for CRUD

My Pragmatic Rule
80% ORM for standard operations + 20% CTEs for complex queries = best of both worlds.
Your users don't care about your tech stack. They care about fast, reliable apps. Use the right tool for the job.
Full breakdown with code examples: https://medium.com/@pascal.cescato/part-3-orms-vs-ctes-the-ultimate-showdown-spoiler-you-can-win-both-battles-603caf1960d7
What's your experience mixing ORMs with advanced SQL? Share in the comments!

Top comments (0)