The thing about the above converter is that you need an abstract entity class, which will need to be extended by the entities that you are managing for. The solution used a Hash Map that takes in a key-value pair. The value is the object and the key of the object is implemented by the abstract entity manager.
One of my coworkers used slightly different approach, which I think is neater and did not require each entity to extend the abstract entity class. What he did was instead of creating the key, he used the hashCode value of the object. Each object is unique and so are their hash values. Therefore, we can safely use the hash values as our key. The detailed code is shown here.
Now, after we upgraded to JBoss 5 and Seam 2.2.1, the way we called the converter from the code is not working anymore. We originally used <f:converter converterId="nameOfConverterId">. But we keep getting "Value Not Valid" error as thrown by JSF. After two weeks of trying to figure out what is the cause, a slight change in the way we call converter solved the problem. Instead of using JSF tag, you can use the converter attribute of the component. For example, if you are using <h:selectManyCheckBox>, you can write like this :<h:selectManyCheckBox value="#{myValue}" converter="#{converterName}">. Make sure you reference the converter name using EL expression, otherwise it won't work.
Hopefully this post will save you a lot of time if you are having similar issues.