Many-to-many mapping and saving

Aurelius won't let you save objects which references transient instances indeed.

This is a very specific situation. You have used composed, manually-assigned id (which is already not recommended) and is mixing with classes that have auto-generated id. If this is a legacy database, ok, if it's not, I highly, strongly recommend you don't use this approach. Use an autogenerated id for the many-to-many table.
If it's not possible, unfortunately you would have to remove the ManyValuedAssociation (Modules property) to be able to save TRole object. You can then retrieve the associated TRoleModule objects using a query (TCriteria).