|
I recently learned Slick, and it was a hellish ride. First of all, a large part of the problems I had were an unbelievable terrible documentation. Sometimes, in order to do even the simplest things, I had to look into particular unit tests deep within the sources of the project, or follow stackoverflow discussions with multiple proposals, only one of which actually worked.
Oftentimes this was for things which I considered granted and implemented. The certainly best example is getting an object by id. I would have thought that this, being the most basic operation, should be possible through some kind of default operation like "get" or "getById" or "objectById" or something else. Instead, you have stackoverflow answers like this: def findById(userId: Int)(implicit session: Session): Option[User] = {
val query = for{
u <- Users if u.id === userId
} yield u
query.firstOption
} http://stackoverflow.com/questions/16461260/select-single-ro... However, that's not even the brink of the iceberg. Try finding out how to update multiple fields in an object. Say you retrieve a User object, and you want to set a new email, zip, and address. I'd suppose, this would work with simple getters and setters, i.e.: user = Users.get(user_id)
user.email = new_mail
user.zip = new_zip
user.address = new_address Instead, you have to do this: val map = Query(User)
.filter(_.id === user_id)
.map(ab => ab.email ~ ab.zip ~ ab.address) map.update((new_mail, new_zip, new_address)) And even that only works with updateable result sets. See:
http://stackoverflow.com/questions/16757368/how-do-you-updat... https://groups.google.com/forum/#!msg/scalaquery/ML56aZAfy3g... Or, to quote from the stackoverflow answer above:
"Typesafe, why your documentation is so bad ? I have to Google pretty much every silly thing or dig through unit-tests for hours. Please improve it. Thanks." Now, after a lot of searching, I found solutions to all of my problems, but it took a long time, lots of Google, and almost nothing came out of their awful documentation. |
All the derision that Rod Johnson got for his keynote where he mentioned the lack of ORM (among other things) as being intimidating to a beginner seems unfair.