Simply put, if you use createSQLQuery and write the query yourself, then your code will have to determine whether you need an update statement or an insert statement, it will also not do anything to your related objects within the main object, you will have to manually go through any Collections within the object, and like the main object, determine if you need an insert/update or delete statement, etc. Also, you will have no idea if you have a stale object, which means you will probably want to go to the database first and see if it is stale. So basically you have to do tons of work manually yourself, if you want that control.
With saveOrUpdate method Hibernate will determine whether it needs an insert or update statement, Hibernate will do transitive persistence to your Collections, if you use the corresponding cascade-option. And if you have optimistic locking then it will also do a select for you before the update to determine if you have stale data or not.
So, I'd say for a complex graph of objects, that you are looking at 15 minutes of coding, versus 2-3 days of coding and also easier to maintain and fix bugs because you will a ton less code using saveOrUpdate().