Troche nie czaje problemu chyba.
- Jesli wysylasz encje z nullami ktore po wybraniu z bazy o ile dobrze rozumiem sam wstawiasz, to dostajesz takie encje z powrotem i wiadomo, wszystko jest usuwane. Jak zmieniasz encje hibernatowe w jedna strone (po odczycie) to przy zapisie / mergu musisz je zmienc w druga strone (dodac te 'zgubione' kolekcje). Innej rady nie ma.
- Mowisz ze klient moze dostac LazyInitializationException czy jak sie to zwie. Ok, ale z Twoimi zmianami moze dostac NPE. Jesli klient nie dostaje NPE to albo nie uzywa tych kolekcji (w zwiazku z czym nie ma problemu - slij lazy kolekcje) albo testuje != null, co jest ogolnie niezgodne z hibernate poniewaz on kolekcje ma zawsze nie-nullowe.
Jak by nie patrzec, to nadbudowales na hb jakies swoje 'rozszerzenie', ktore jest polowicznie zaimplementowane - nulluje kolekcje przy odczycie, ale nie przywraca ich przed zapisem / mergem. Jesli dalej chcesz ciagnac ta strategie, to chyba bys musial zaimplementowac swojego merga - pobrac znowu encje z bazy, 'nalozyc' na nia zmiany klienta (nie nadpisywac kolekcji ktore sam znullowales!) i ta prawdziwa encje mergowac - wtedy lazy kolekcje pozostana lazy.
Pytanie jak zapamietac ktore kolekcje sa lazy a ktore klient naprawde zmienil - nie wiem jak to jest w Twoim kodzie, moze jest to latwe do odgadniecia, moze nie, ale mozna to zrobic tak, ze w momencie gdy nullujesz kolekcje 'zbierasz' info o tym ktore byly lazy i zapisujesz do jakiegos pola transient w tej encji. Gdy ona wraca do ciebie od klienta, przy twojej wlasnej implementacji merga masz to dodatkowe info dostepne.
Ogolnie beznadziejny pomysl z tym nullowaniem. Klient to kto? Czesc twojej aplikacji? To napraw kod i nie korzystaj z lazy kolekcji. Jesli klient to nie twoj kod ktory jest gdziesz na innym serwerze to i tak slanie encji hibernatowych nie jest moim zdaniem szczesliwym pomyslem.