When to use which template group?
Both template groups offer a wide set of functionality, but do that in a different way. This difference makes it important for you to know when to pick which template group for a given project. Below are two short lists which sum up some reasons for choosing each template group and which will help you with the decision which template group to take.
When to use SelfServicing
-When the project targets a single database type.
-When you are not using a distributed scenario like remoting or webservices.
-When you need navigation through your object model in a databinding scenario and you -want to load the data using lazy loading.
-When you don't need to extend the framework.
-When you like to have the persistence logic into the entity classes.
-When you do not require fine grained database access control, like targeting per call another database.
When to use Adapter
-When the project targets multiple database types or would be able to do that in the future.
-When you are using a distributed scenario like remoting or webservices.
-When you don't need lazy loading scenarios in relation traversals. You can still navigate relations but you have to fetch the data up-front.
-When you need to extend the framework with derived classes.
-When you like to see persistence logic as a 'service', which is offered by an external object (broker, adapter).
-When you require fine grained database access control.
So as you can read, it really depend on what you need to do in your project(multiple database type, webservices,lazy loading ..) First of all, you need to define what you want to do with your data.
You can find all the text in the manual, section: Concepts - Templates and Template groups