L'eccezione si verificava durante il flush di una sessione in cui avevo salvato, con SaveOrUpdate, un nuovo oggetto ancora transiente; il problema era dovuto al fatto che avevo generato da codice il guid e quindi il metodo SaveOrUpdate pensava di aver a che fare con un oggetto esistente nel db!