Aqui esta…!! Eu estou usando um arquivo unico chamado model.hbm.xml.
<?xml version="1.0" encoding="UTF-8"?>
<id name="id" column="id_editora" type="long">
<generator class="identity"/>
</id>
<property name="cnpj" length="14" type="string"/>
<property name="ie" length="20" type="string"/>
<property name="razaoSocial" length="150" type="string"/>
<id name="id" column="id_funcionario" type="integer">
<generator class="identity"/>
</id>
<property name="nome" length="150" type="string" not-null="true" index="nome_idx"/>
<property name="cargo" length="150" type="string" not-null="true"/>
<component name="comercial" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_comercial" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_comercial" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_comercial" type="string" not-null="true"/>
</component>
<component name="celular" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_celular" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_celular" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_celular" type="string"/>
</component>
<component name="residencial" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_residencial" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_residencial" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_residencial" type="string" not-null="true"/>
</component>
<property name="email" length="255" type="string" not-null="true" unique="true"/>
<property name="cpf" length="11" type="string"/>
<property name="rg" length="30" type="string"/>
<many-to-one name="editora" class="com.netabc.model.Editora" column="id_editora" cascade="all"/>
<many-to-one name="departamento" class="com.netabc.model.Departamento" column="id_departamento"/>
<id name="id" column="id_departamento" type="integer">
<generator class="identity"/>
</id>
<property name="nome" length="100" type="string" not-null="true" index="nome_idx"/>
<bag name="funcionarios" order-by="nome">
<key column="id_departamento"/>
<one-to-many class="Funcionario"/>
</bag>
<id name="id" column="id_cliente" type="long">
<generator class="identity"/>
</id>
<discriminator column="tipo" length="1" type="string"/>
<property name="nome" length="150" type="string" not-null="true" index="nome_idx"/>
<property name="abreviacao" length="30" type="string" not-null="true"/>
<bag name="enderecos" order-by="tipo">
<key column="id_cliente"/>
<one-to-many class="com.netabc.model.Endereco"/>
</bag>
<many-to-one name="contatoPadrao" class="com.netabc.model.Contato" column="contatoPadrao" not-null="true"/>
<bag name="contatos" order-by="nome">
<key column="id_cliente"/>
<one-to-many class="com.netabc.model.Contato"/>
</bag>
<bag name="produtos" order-by="descricao">
<key column="id_cliente"/>
<one-to-many class="com.netabc.model.Produto"/>
</bag>
<subclass name="PessoaFisica" discriminator-value="F">
<property name="cpf" length="11" type="string" index="cpf_idx"/>
</subclass>
<subclass name="PessoaJuridica" discriminator-value="J">
<property name="cnpj" length="14" type="string" index="cnpj_idx"/>
<property name="ie" length="20" type="string"/>
<property name="razaoSocial" length="150" type="string" index="razaosocial_idx"/>
<property name="site" length="255" type="string"/>
</subclass>
<id name="id" column="id_endereco" type="long">
<generator class="identity"/>
</id>
<many-to-one name="tipo" class="com.netabc.model.TipoEndereco" column="tipo" not-null="true"/>
<property name="endereco" length="255" type="string" not-null="true"/>
<property name="bairro" length="150" type="string" not-null="true"/>
<property name="cidade" length="200" type="string" not-null="true"/>
<property name="estado" length="2" type="string" not-null="true"/>
<property name="cep" length="8" type="string" not-null="true"/>
<many-to-one name="cliente" class="com.netabc.model.Cliente" column="id_cliente" cascade="all"/>
<id name="tipo" column="tipo_endereco" type="string" length="2">
<generator class="assigned"/>
</id>
<property name="descricao" length="40" type="string" not-null="true" index="descricao_idx"/>
<id name="id" column="id_contato" type="long">
<generator class="identity"/>
</id>
<property name="nome" length="150" type="string" not-null="true" index="nome_idx"/>
<property name="departamento" length="150" type="string" not-null="true"/>
<component name="comercial" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_comercial" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_comercial" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_comercial" type="string" not-null="true"/>
</component>
<component name="celular" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_celular" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_celular" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_celular" type="string"/>
</component>
<component name="fax" class="com.netabc.model.Telefone">
<property name="ddd" column="ddd_fax" length="2" type="string" not-null="true"/>
<property name="numero" column="numero_fax" length="20" type="string" not-null="true"/>
<property name="ramal" length="10" column="ramal_fax" type="string" not-null="true"/>
</component>
<property name="email" length="255" type="string" index="email_idx"/>
<property name="cpf" length="11" type="string"/>
<property name="rg" length="30" type="string"/>
<many-to-one name="cliente" class="com.netabc.model.Cliente" column="id_cliente" cascade="all" not-null="true"/>
<id name="id" column="id_produto" type="integer">
<generator class="identity"/>
</id>
<property name="descricao" length="150" type="string" not-null="true" index="descricao_idx"/>
<property name="abreviacao" length="20" type="string"/>
<many-to-one name="cliente" class="com.netabc.model.Cliente" column="id_cliente" not-null="true"/>
<id name="id" column="id_midia" type="integer">
<generator class="identity"/>
</id>
<discriminator column="tipo" length="1" type="string"/>
<property name="descricao" length="40" type="string" not-null="true" unique="true"/>
<bag name="anuncios" order-by="titulo">
<key column="id_midia"/>
<one-to-many class="com.netabc.model.Anuncio"/>
</bag>
<subclass name="Revista" discriminator-value="R">
<bag name="edicoes" order-by="data desc">
<key column="id_midia"/>
<one-to-many class="Edicao"/>
</bag>
</subclass>
<composite-id name="id" class="com.netabc.model.NumeroEdicao">
<key-many-to-one name="midia" class="com.netabc.model.Midia" column="id_midia"/>
<key-property name="edicao" type="integer" column="edicao"/>
</composite-id>
<property name="data" type="date" not-null="true"/>
<id name="id" column="id_segmento" type="integer">
<generator class="identity"/>
</id>
<property name="descricao" length="40" type="string" not-null="true"/>
<id name="id" column="id_anuncio" type="integer">
<generator class="identity"/>
</id>
<property name="titulo" length="40" type="string" not-null="true" index="titulo_idx"/>
<property name="abreviacao" length="20" type="string"/>
<property name="valor" type="double" not-null="true"/>
<property name="descricao" length="255" type="string"/>
<many-to-one name="midia" class="com.netabc.model.Midia" column="id_midia" not-null="true"/>