Two Laptop Bag
The moose likes Object Relational Mapping and the fly likes When to Use CollectionTable and when to Use OneToMany Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "When to Use CollectionTable and when to Use OneToMany" Watch "When to Use CollectionTable and when to Use OneToMany" New topic

When to Use CollectionTable and when to Use OneToMany

RamandeepS Singh
Ranch Hand

Joined: Aug 25, 2009
Posts: 63

Can anybody suggest me, when should we use @CollectionTable and When to use @OneToMany

I think @OneToMany is always Beneficial

We we are Using @CollectionTable i think there will be no Improvement in Performance as well as it limits us that we can not persist without parent and even we can not query them independently

However we can achieve the same functionality with more flexibility by using @oneToMany, We Just have to write few lines more in our mapping

Please Correct me if i am Wrong

Ramandeep Singh
Bill Gorder

Joined: Mar 07, 2010
Posts: 1682

See here:

An ElementCollection mapping can be used to define a collection of Embeddable objects. This is not a typical usage of Embeddable objects as the objects are not embedded in the source object's table, but stored in a separate collection table. This is similar to a OneToMany, except the target object is an Embeddable instead of an Entity. This allows collections of simple objects to be easily defined, without requiring the simple objects to define an Id or ManyToOne inverse mapping. ElementCollection can also override the mappings, or table for their collection, so you can have multiple entities reference the same Embeddable class, but have each store their dependent objects in a separate table.

The limitations of using an ElementCollection instead of a OneToMany is that the target objects cannot be queried, persisted, merged independently of their parent object. They are strictly privately-owned (dependent) objects, the same as an Embedded mapping. There is no cascade option on an ElementCollection, the target objects are always persisted, merged, removed with their parent. ElementCollection still can use a fetch type and defaults to LAZY the same as other collection mappings.

[How To Ask Questions][Read before you PM me]
I agree. Here's the link:
subject: When to Use CollectionTable and when to Use OneToMany
It's not a secret anymore!