We're in the process of migrating ActivityInfo.org to Google AppEngine and their MySQL-based Cloud SQL service.
The experience has been quiet straightforward, but we've had to a do a bit of tuning to get Hibernate working well on AppEngine.
First, you have to completely disable connection pooling. CloudSQL instances pop up and down so you can't hold on to a Connection beyond the duration of a request. This can be done through configuration:
hibernate.connection.pool_size = 0
The second issue is startup time. By default, Hibernate 3.6 (the version we're using) will scan your classpath looking for classes annotated with @Entity. This isn't a big deal when you bring up new instances once a day or so, but AppEngine instances pop up and down quite frequently.
Hibernate was taking 30+ seconds to initialize, which means that many warm up requests-- the first requests from the user to a new instance -- were timing out.
We were able to work around this by providing the list of classes explicitly using the Ejb3Configuration API:
Ejb3Configuration config = new Ejb3Configuration();
We had been using persistence.xml for configuration, but I wasn't able to find away to disable the class path scan without resorting to the Ejb3Configuration API.