Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

List vs Set on JPA 2 - Pros / Cons / Convenience

I have tried searching on Stack Overflow and at other websites the pros, cons and conveniences about using Sets vs Lists but I really couldn't find a DEFINITE answer for when to use this or that.

From Hibernate's documentation, they state that non-duplicate records should go into Sets and, from there, you should implement your hashCode() and equals() for every single entity that could be wrapped into a Set. But then it comes to the price of convenience and ease of use as there are some articles that recommend the use of business-keys as every entity's id and, from there, hashCode() and equals() could then be perfectly implemented for every situation regardless of the object's state (managed, detached, etc).

It's all fine, all fine... until I come across on lots of situations where the use of Sets are just not doable, such as Ordering (though Hibernate gives you the idea of SortedSet), convenience of collectionObj.get(index), collectionObj.remove(int location || Object obj), Android's architecture of ListView/ExpandableListView (GroupIds, ChildIds) and on... My point is: Sets are just really bad (imho) to manipulate and make it work 100%.

I am tempted to change every single collection of my project to List as they work very well. The IDs for all my entities are generated through MYSQL's auto-generated sequence (@GeneratedValue(strategy = GenerationType.IDENTITY)).

Is there anyone out the who could in a definite way clear up my mind in all these little details mentioned above?

Also, is it doable to use Eclipse's auto-generated hashCode() and equals() for the ID field for every entity? Will it be effective in every situation?

Thank you very much,

Renato

like image 811
renatoaraujoc Avatar asked Aug 22 '14 16:08

renatoaraujoc


People also ask

When should you not use JPA?

Complex reporting or data mining related use cases are not a good fit for JPA and Hibernate. You need to implement very complex queries for these use cases, and you should better implement them with SQL than with JPQL or HQL.

Where should we keep JPA configuration file?

xml JPA configuration file located in META-INF folder of your classpath.


1 Answers

List versus Set

Duplicates allowed Lists allow duplicates and Sets do not allow duplicates. For some this will be the main reason for them choosing List or Set.

Multiple Bag's Exception - Multiple Eager fetching in same query One notable difference in the handling of Hibernate is that you can't fetch two different lists in a single query. It will throw an exception "cannot fetch multiple bags". But with sets, no such issues.

like image 196
Ankur Singhal Avatar answered Sep 20 '22 03:09

Ankur Singhal