How-(not-)to use Hibernate
Tuesday, April 1st, 2008Digging into some legacy code, I found the worst way to initialize Hibernate. The first step should be something like:
Configuration cfg = new Configuration(); cfg.addClass(Bean1.class) .addClass(Bean2.class) .addClass(Bean3.class);
But I found this:
Configuration cfg = new Configuration();
Object[] objs = new Object[] {
new Bean1(), new Bean2(), new Bean3()
};
for (int i = 0; i < objs.length; i++)
cfg.addClass(objs[i].getClass());
}
You only need to know the basics of Java to find out the waste of memory and CPU, instantiating a lot of classes (and an array) only to get the class instantiated. And, of course, the unnecessary loop to iterate over the array. It’s like baking a cake to find out the brand of the flour.
As if it’s not enough, this piece of code is replicated in about 7 spots. Yes, the right way to configure Hibernate is using the “HibernateUtils” pattern, as in documentation.
And, as if it’s not enough yet, this piece of code creates a SessionFactory that is sent via constructor to an entire hierarchy of classes. Yes, it is the worst solution, since the Session creation could be on HibernateUtils (as in documentation, again).