It even uses its own HQL. Why not use plain SQL?
Because there is no such thing as "plain SQL". ANSI 92 SQL is the closest thing we have to a cross platform standard and it is variously implemented accross all databases. Some database implement some of it, others all, some implement it all but prefer their own varient. HQL is so close to SQL in syntax that I find it pretty easy to switch between the two.
And Hibernate Annotations makes code messy, large and less readable.
If you are not a not a fan of annotation, why use them?
I like Hibernate. OK its not perfect, but I can remember the days when a decent
Java ORM didn't exist. Not good times.