Amazing how asking for help seems to shake something loose so you can find the answer yourself.
This seems to answer my problems, and with a lot less effort than I first feared:
Code:
@hibernate.map cascade="all"
@hibernate.collection-key column="key"
@hibernate.collection-index column="key" type="long"
@hibernate.collection-element column="value" type="serializable"
The main downside is that this approach is that a serializable object is opaque - the RHS of the map can't be used in Hibernate queries.[/code]