Hi Adam,

A comparison between Spring Data XYZ APIs and jOOQ necessarily leads to a
comparison between DDD and relational algebra+, where the + means that SQL
is an "algebra" that enhances the relational one in many non-relational
ways.

Both modelling frameworks are very opinionated, although, contrary to what
one might believe when reverse engineering DDD from opinionated
implementations like Spring Data, DDD is not really about data modelling.
It is more about problem modelling. The way I understand it, it would be
perfectly possible to implement an ubiquitous language and clearly bounded
context of a system without being too opinionated about persistence
strategies and data modelling within a domain. Here are some resources that
could be used to back my claim:

- https://softwareengineering.stackexchange.com/q/305061/9411
- https://softwareengineering.stackexchange.com/q/123023/9411

In my own opinion, the relational model is the best way to model data that
we have had in the last 50 years. It solved a lot of problems that pre-date
the relational model (e.g. the ones of the hierarchical and networked
models), and no attempt to tackle modelling after the relational model came
even close to it. JPA is pretty much a Java client implementation of the
relational model, with a relatively humble way of implementing the algebra
(JPQL compared to SQL). jOOQ models the algebra without being too
opinionated about the modelling and the persistence.

Spring Data builds on top of a variety of "protocols" (e.g. JDBC, JPA,
etc.) to implement something entirely different, a consolidated view of how
to deal with aggregates on top of pretty much any data store. You could
build a Spring Data jOOQ implementation that uses jOOQ behind the scenes to
implement loading aggregates.

Of course, most people who use Spring Data XYZ use it mainly because it
simplifies a few repetitive tasks, not because they actually believe in the
paradigms assumed by Spring Data. Just like they use JPA for that very
reason, and given how popular jOOQ's org.jooq.DAO are, they even do that
with jOOQ as well.

Unless you "just" want some convenience (as shown above), you're not really
comparing Spring Data JDBC and jOOQ specifically. You're going to compare
two architectural approaches and paradigms. In a "pure" Spring Data world,
you *want* to work with the way they think about aggregates. In a "pure"
jOOQ world, you *want* to embrace relational algebra, set theory, etc. to
interact with your data.

Hope this helps
Lukas



On Mon, Jun 22, 2020 at 2:20 AM Adam Zell <zells...@gmail.com> wrote:

> I have read a little about https://spring.io/projects/spring-data-jdbc .
> The project simplifies the JPA implementation and targets domain driven
> design (DDD) architectures.  Has anyone used it, and if so, how does it
> compare to jOOQ?
>
>
> https://docs.spring.io/spring-data/jdbc/docs/2.0.1.RELEASE/reference/html/#jdbc.entity-persistence.types
>  has
> limited support for hydrating relations, somewhat similar to jOOQ:
>
> *The handling of referenced entities is limited. This is based on the idea
> of aggregate roots as described above. If you reference another entity,
> that entity is, by definition, part of your aggregate. So, if you remove
> the reference, the previously referenced entity gets deleted. This also
> means references are 1-1 or 1-n, but not n-1 or n-m.*
>
> *If you have n-1 or n-m references, you are, by definition, dealing with
> two separate aggregates. References between those should be encoded as
> simple id values, which should map properly with Spring Data JDBC.*
>
> --
> You received this message because you are subscribed to the Google Groups
> "jOOQ User Group" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to jooq-user+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jooq-user/23390dcb-2500-4612-b5fe-5261e36036f7o%40googlegroups.com
> <https://groups.google.com/d/msgid/jooq-user/23390dcb-2500-4612-b5fe-5261e36036f7o%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jooq-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jooq-user/CAB4ELO5NEZidKSQ%2BPbLBKGX%3DUpmsoTtEZEYWDTSZOdxLciYhKA%40mail.gmail.com.

Reply via email to