If you want to get the first name of students in a class in hibernate you can try the below HQL,
select s.firstName from Student s where s.divisionId = 4
This will give you the list of first names of students only. So, last name, age etc will not be loaded. Hence for the scenario in your questions you can get good performance using hibernate.
Now when you need the List<Students>
of division 4 use the below query,
select s from Student s where s.divisionId = 4
Imagine writing this query in SQL
and converting each and every column to its corresponding java properties etc.. All theses hibernate does it for you in the above.
So, you can tune hibernate according to your requirement.
When it comes to the performance of hibernate, it is little slower than the traditional JDBC but much more convenient and effective than JDBC. Basically the the benefits you receive from the hibernate overrules the smaller drawbacks.
You should learn about the performance pitfalls in hibernate like Lazy loading and should try to avoid those.