There are several options.
1. Filters (filter data being read by using for example customer id, user id, etc.)
2. Sharding (split data over difference databases based on a sharding strategy)
Both just have one SessionFactory instance if I remember correctly. The biggest problem is that the SessionFactory also is the 1st level cache. Sharing splits data accross several databases. You could have a sharding strategy where you put data from customer A in database A. But my guess is that you some how just want to use a different connection for each customer.
I do now that you can pass a connection to a session. Maybe you can find out if it is possible to do use this but I can imagine that this could have impact on the 1st and 2nd level cache.