sql >> Databáze >  >> RDS >> Mysql

Hibernate Uložte podivné chování

Váš největší problém je nesprávný sloupec v <key> mapování - mělo by to být "user_id", nikoli "id". To znamená, že celé vaše mapování mi připadá trochu zvláštní.

Za prvé, pokud chcete, aby se ID generovala automaticky, měli byste opravdu nechat Hibernate, aby se o to postarala zadáním vhodného generátoru:

 <id column="id" name="id">
   <generator class="native"/>
 </id>

Přečtěte si Dokumentaci k hibernaci na generátorech pro různé dostupné možnosti.

Za druhé, pokud vše, co potřebujete, je sada typů řetězců, zvažte jejich přemapování do kolekce prvků spíše než na vztah jeden k mnoha:

 <set name="types" table="types">
    <key column="user_id"/>
    <element column="type" type="string"/>
 </set> 

Tímto způsobem pro to nebudete potřebovat explicitní třídu "Typy" nebo mapování. I když chcete mít v "Typech" další atributy, stále je můžete mapovat jako komponentu, nikoli jako entitu.

A konečně, pokud „Typy“ musí být entita kvůli nějakému požadavku, který jste nepopsali, vztah mezi „Uživateli“ a „Typy“ je obousměrný a je třeba jej takto mapovat:

 <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"/>

V druhém případě by "Types" musel mít vlastnost "user" typu "Users".Zde je podrobným příkladem.



  1. Formátujte řetězec s více parametry, aby je MySQL mohla zpracovat

  2. Jak seskupit podle objednávky DESC

  3. Jak optimalizovat výkon MySQL pomocí MySQLTuner

  4. Jak mám uložit GUID v tabulkách MySQL?