Ustawiłem poziom hibernacji dziennika na TRACE i znalazłem problem. W rzeczywistości był to błąd mapowania/logiki/bazy danych. Klucz podstawowy składał się z dwóch kolumn (zgodnie z klasą jednostki), a jedna z tych kolumn dopuszczała wartość null. Jednak klucz podstawowy nigdy nie może mieć wartości null. Dlatego hibernacja zawsze zwracała wartość null.