Hibernate is great, as far as you exactly know what you can do.
Whenever you do a mistake in mapping or HQL, it gives you a cold shower in a form of either:
- a cryptic exception from the deepness of some 3rd party library,
- or a NPE, or ArrayIndexOutOfBoundsException or similar, again coming from the deep,
- or an error from the JDBC driver (which fortunatelly, unlike Hibernate, detects the error and doesn't continue to the DB),
- or you end up with an invalid SQL query.
It's great Hibernate is on track and adding awesome features constantly, but IMO user friendliness should also be kept in mind.
For example: New user doesn't know the rules of thumb and instead of
AND wubTags MEMBER OF wuSimilar.tags
might try
AND wubTags IN wuSimilar.tags
which ends up with SQL syntax exception near "))". Huh? "))"? The query doesn't even contain a single parenthesis.
What happens is that Hibernate translates this to
(worktag2_.id in (.))
Ok, it's a development scenario, so you know when started happening and can figure out, but still - this really seems like something very easy (and cheap) to handle.