In the first case myObj2 is cached in the session, therefore, you are only hitting database once to retrieve the object with myObj2Id.
In the second case, you are hitting the database 200 times to retrieve myObj2. It is because you are issuing a query (using the criteria interface) and queries are not cached in the session, and they are only cache in the second-level cache if explicitly instructed to do so.
I explained the second-level cache mechanics here:
http://forum.hibernate.org/viewtopic.ph ... 65#2357765