You can give it a try by creating a custom user type implementing ICompositeUserType
:
<set name="Urls" table="EntityUrls">
<key column="EntityId"/>
<element type="UserTypes.UriCompositeUserType">
<column name="Id" />
<column name="Uri" />
</element>
</set>
Here is what NHibernate says about ICompositeUserType
:
A UserType that may be dereferenced in a query. This interface allows a custom type to define "properties". These need not necessarily correspond to physical .NET style properties. A ICompositeUserType may be used in almost every way that a component may be used. It may even contain many-to-one associations. Implementors must be immutable and must declare a public default constructor. Unlike UserType, cacheability does not depend upon serializability. Instead, Assemble() and Disassemble() provide conversion to/from a cacheable representation.