I've studied Spring Data code a bit...
interesting principles but this is a bit strange because you may think it's a common API for all DB.
But no, there is almost one API per DB or to be more precise per DB type. So as many NoSQL DB are completely different, the API are different. A few principles and patterns are common but that's all.
Anyway, I think it's not a bad choice because the more I work with different DB, the more I think common API is very hard to maintain and sometimes hide too much of the DB features itself.
Siena tried to reduce the distance between SQL and GAE but it's really hard to keep full compatibility, almost impossible actually. You can only reduce the number of features provided by the framework or you get crazy.
Hibernate is a good example because even if SQL DB should be quite standard, the differences are huge also and hibernate is just an intersection and can't do everything.
Spring-Data doesn't have this problem. But I looked at the code and as Spring, it's heavily based on runtime enhancement of your classes and this is not something I consider viable in terms of performance, maintainability and robustness. But anyway I trust those people to write great code and in Java you don't really have choice to do else ;)
Pascal