Вот как вы делаете глубокие копии в Ruby
d = Marshal.load( Marshal.dump(h) )
Из NHibernate в действии (Куате, Харрис, Бауэр, Кинг):
После фиксации транзакции сеанс NHibernate заменяет ее с новой транзакцией. Это означает, что вы должны держать ссылку на транзакцию, которую вы совершаете, если считаете, что она вам понадобится позже. Это необходимо, если вам нужно вызвать transaction.WasCommited. session.Transaction.WasCommitted всегда возвращает false.
Скорее всего то же самое относится к свойству Transaction.WasRolledBack
.