1. Sofern Du von Hibernate generierte Lazy-Proxies verwendest, werden Zugriffe auf die DB genau dann gemacht, wenn "von außen" Methoden am Proxy aufgerufen werden. Allgemein gesprochen also beim ersten Aufruf einer public-Methode. In Deinem Beispiel würde get(0) also den Proxy auflösen.
2.
http://www.hibernate.org/hib_docs/v3/reference/en/html/inheritance.html
3. Die Session ist im normalen Fall einfach nur die DB-Transaktion. Und die kannst Du auch genau so verwenden.
4. Mir fällt da spontan ein, daß man Objekte, die in einer Session geladen wurden, nicht in anderen Sessions wiederverwenden sollte (detach/reattach). Man kann sich das Leben damit recht schwer machen...