Hibernate – why use many-to-one to represent a one-to-one?

There are several ways to implement a one-to-one association in a database: you can share a primary key but you can also use a foreign key relationship with a unique constraint (one table has a foreign key column that references the primary key of the associated table).

In the later case, the hibernate way to map this is to use a many-to-one association (that allows to specify the foreign key).

The reason is simple: You don’t care
what’s on the target side of the
association, so you can treat it like
a to-one association without the many
part. All you want is to express “This
entity has a property that is a
reference to an instance of another
entity” and use a foreign key field to
represent that relationship.

In other words, using a many-to-one is the way to map one-to-one foreign key associations (which are actually maybe more frequent than shared primary key one-to-one associations).

Leave a Comment