We are building a product for Procurement Domain in JAVA.

Following are the main technical requirements.

  1. Platform Independent
  2. Database Independent
  3. Browser Independent

In functional requirements the product is very dynamic in nature. The main reason being the procurement process around the world is different from client to client.

Briefly we need to have a dynamic workflow engine and a dynamic template engine. The workflow engine by which we can define any kind of workflows and the template engine allows us to define any kind of data structures and based on definition it can get the user input through workflow.

We have been developing this product for almost 2 years. It has been a long time till we can get down with the dynamics of requirements.

Till now we have developed a basic workflow and template engine and which is in use at one of the client.

We have been using following technologies.

  1. GWT-Ext (Front End Framework)
  2. Hibernate (Database Layer)

In between we have faced some issues with GWT-Ext (mainly browser compatibility) and database optimization due to sub classing in hibernate.

For resolving GWT-Ext issue, which a dying community so we decided to move to SmartGWT. In SmartGWT we faced issues related to loading and now we are able to finalize that GWT 2.3 will be the way to go as the library is rich and performance is upto the mark.

We are able to almost finalize GWT-Spring based front and middle layer.

In hibernate, we found main issues with sub-classing due to that it was throwing astronomical queries and sometimes it would stop firing any queries for 5-10 seconds or may be around 30 seconds and then resume again. Few days back I came to one article related to ORM.

I am a traditional .Net SQL developer and I have always worked with relational database. Reading through this article, I also found it relating to the issues I face. I am still not completely convinced of using hibernate and this article just supported my opinion.

Following are the questions for which I am looking for an answer.

  1. Should we be going with Hibernate in case of dynamic database requirements and the load of the data will be heavy in future? How can we partition the data, how we can efficiently join the data, how we can optimize the queries? If the answer is no then how do we achieve database independence?
  2. Is our choice related to GWT and Spring proper or do we need to change that too?
  3. Should we use any other key value pair database if the data is dynamic in nature and it is very difficult to make it relational?

1 Answer 1


Browser independence is relatively easy to achieve, and if this is a web application, then platform independence isn't an issue (unless you mean deployment platform), and java does provide this to a large degree.

Database independence is an entirely separate matter. In 20 years of writing software I have not been able to properly crack that one. And, TBH, once you have a successful product, and customers are willing to pay for it, then it doesn't actually matter that much.

To some degree I support tdammers comment. And it is from this aspect that I would actually advocate not to use any ORM tool. For anything that requires complex and diverse data persistence, ORM tools will not give you what you need. You are much better off with a properly implemented data access layer of your own. That will give you the flexibility to refactor and subclass as and when needed and tune the database queries in the right places.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.