Hibernate supports three data mapping types: basic (e.g String, int), Embeddable and Entity. Most often, a database row is mapped to an Entity, each database column being associated to a basic attribute. Embeddable types are more common when combining several field mappings into a reusable group (the Embeddable being merged into the owning Entity mapping structure).
Both basic types and Embeddables can be associated to an Entity through the @ElementCollection, in a one-Entity-many-non-Entity relationship.
Although we are going to explain these optimizations using an @ElementCollection, the same rules apply to any unidirectional @OneToMany or to both unidirectional and bidirectional @ManyToMany associations.