I'm using Middlegen due to the fact that we create the databaseschema first and these are normalized as well. Afterwards I take Middlegen to create the mappings.
See the following:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin
http://boss.bekk.no/boss/middlegen/
http://hibernate.sourceforge.net/
-->
<class
name="hibernate.ticket.Workflow"
table="workflow"
schema="public"
proxy="hibernate.ticket.Workflow"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="sequence">
<param name="sequence">workflow_id_seq</param>
</generator>
</id>
<!-- associations -->
<!-- bi-directional one-to-many association to Project -->
<set
name="projects"
lazy="false"
inverse="true"
>
<key>
<column name="workflow_id" />
</key>
<one-to-many
class="hibernate.ticket.Project"
/>
</set>
<!-- bi-directional one-to-many association to WorkflowSeq -->
<set
name="workflowSeqs"
lazy="false"
inverse="true"
>
<key>
<column name="workflow_id" />
</key>
<one-to-many
class="hibernate.ticket.WorkflowSeq"
/>
</set>
</class>
</hibernate-mapping>
Hope this will point in the right direction.