ORM – “Impedance mismatch”

Also known as “Paradigm mismatch”.

Object/Relational Mapping has an inherent paradigm mismatch when it comes to granularity,subtypes,navigating an object graph and polymorphism.

– The problem of granularity – Columns in a table are necessarily “scalar” (atomic). Perhaps there are database-specific features that dont have this limitation, but in general, this is a paradigm mismatch that must be kept in mind.

–  The problem of subtypes – How to map Inheritance hierarchies to database tables?

How to efficiently navigate an object graph? Example: userobj->getAddress()->getZip();

Interesting question: Why not use serialization for the persistence layer?

Java has a built-in persistence mechanism: Serialization provides the ability to write a graph of objects (the state of the application) to a byte-stream, which may then be persisted to a file or database. Serialization is also used by Java’s Remote Method Invocation (RMI) to achieve pass-by value semantics for complex objects.
Another usage of serialization is to replicate application state across nodes in a cluster of machines.

Why not use serialization for the persistence layer? Unfortunately, a serialized graph of interconnected objects can only be accessed as a whole; it’s impossible to retrieve any data from the stream without deserializing the entire stream. Thus, the resulting byte-stream must be considered unsuitable for arbitrary search or aggregation.
It isn’t even possible to access or update a single object or subgraph independently.
Loading and overwriting an entire object graph in each transaction is no option for systems designed to support high concurrency.

Hibernate is supposed to provide the most elegant solution to all the above mentioned problems.

Even better, Hibernate supports user-defined custom types. The interfaces UserType and CompositeUserType are provided to allow you to add your own types.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: