The fastest Fetch mode is subselect, but when you want to have only all users, then contracts also will be fetched, and this can be 100 times slower than JDBC.

My conclusion is that the better way to gets data from databases is using JDBC (use DAO pattern) because in bigger databases all queries must be written consciously, hibarnate is good when you have 1000 rows in table, but not milions.