Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Hibernar Salvar comportamento estranho


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.