Seu maior problema é a coluna incorreta no
<key>
mapeamento - deve ser "user_id", não "id". Dito isto, todo o seu mapeamento parece um pouco estranho para mim. Em primeiro lugar, se você deseja que os IDs sejam gerados automaticamente, você deve deixar o Hibernate cuidar disso especificando o gerador apropriado:
<id column="id" name="id"> <generator class="native"/> </id>
Leia a Documentação do Hibernate em geradores para várias opções disponíveis.
Em segundo lugar, se tudo o que você precisa é de um conjunto de tipos de strings, considere remapear-los em uma coleção de elementos em vez de um relacionamento um-para-muitos:
<set name="types" table="types"> <key column="user_id"/> <element column="type" type="string"/> </set>
Dessa forma, você não precisará de uma classe ou mapeamento "Types" explícito para isso. Mesmo se você quiser ter atributos adicionais em "Tipos", ainda poderá mapeá-lo como componente em vez de entidade.
Por fim, se "Tipos" deve ser uma entidade devido a algum requisito que você não descreveu, a relação entre "Usuários" e "Tipos" é bidirecional e precisa ser mapeada como tal:
<set name="types" table="types" inverse="true"> <key column="user_id"/> <one-to-many class="Types"/> </set> ... in Types mapping: <many-to-one name="user" column="user_id" not-null="true"/>
No último caso, "Types" teria que ter uma propriedade "user" do tipo "Users".Aqui é um exemplo detalhado.