sql >> Databasteknik >  >> RDS >> Mysql

Viloläge Spara konstigt beteende

Ditt största problem är felaktig kolumn i <key> mappning - det ska vara "user_id", inte "id". Som sagt, hela din kartläggning verkar lite märklig för mig.

Först och främst, om du vill att ID:n ska genereras automatiskt bör du verkligen låta Hibernate ta hand om det genom att ange lämplig generator:

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

Läs Vilolägesdokumentation a> på generatorer för olika tillgängliga alternativ.

För det andra, om allt du behöver är en uppsättning strängtyper, överväg att mappa om dem till en samling element snarare än en-till-många-relationer:

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

På så sätt behöver du inte explicit "Types"-klass eller mappning för den. Även om du vill ha ytterligare attribut på "Typer", kan du fortfarande mappa det som komponent snarare än entitet.

Slutligen, om "Typer" måste vara en enhet på grund av något krav som du inte har beskrivit, är relationen mellan "Users" och "Types" dubbelriktad och måste mappas som sådan:

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

I det senare fallet måste "Types" ha en "user"-egenskap av typen "Users".Här är ett detaljerat exempel.



  1. Hibernate genererar inte kaskad

  2. Välj få hela raden som motsvarar max i MySQL Group

  3. Hur ringer man lagrad procedur med Eloquent (Laravel)?

  4. Exportera lagrat procedurresultat till Excel i SSMS