When creating an instance of Student from the data read in the database, Hibernate initializes the subjects
collection with an instance of its own implementation of Collection (which well' call PersistentCollection).
This PersistentCollection is not initialized initially, and doesn't contain any data. The first time any method of this collection is called, a SQL query is executed to load all the subjects of the student, and the subjects are then cached inside the collection for all subsequent method calls.