NHibernate simply treats your RDBMS as a data store. In most cases, this means that you can let NHibernate do the work for you.
Let NHibernate do the cascading deletes. That way you can keep your logic and control where it belongs (in your application), rather than in the database where your application has little control or flexibility.
EDIT:
ON DELETE CASCADE does not always exhibit great performance with NHibernate. You have to be very careful what the cascade settings of your collection associations are set to. See this article: http://eddii.wordpress.com/2006/11/16/hibernate-on-deletecascade-performance/
Unless performance is a big issue for you, it's generally cleaner and less problematic to let NHibernate do the work. Jamie Ide correctly points out:
As with triggers, NHibernate will not
know that the database representation
of an object has changed due to a
database operation. I would avoid
using them for this reason in most
cases.