sql >> Database teknologi >  >> RDS >> Mysql

Dvale Gem mærkelig adfærd

Dit største problem er forkert kolonne i <key> mapping - det skal være "user_id", ikke "id". Når det er sagt, virker hele din kortlægning lidt mærkelig for mig.

Først og fremmest, hvis du vil have id'er automatisk genereret, bør du virkelig lade Hibernate tage sig af det ved at angive passende generator:

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

Læs Dvaledokumentation a> på generatorer til forskellige tilgængelige muligheder.

For det andet, hvis alt, hvad du behøver, er et sæt strengtyper, kan du overveje at genmappe dem til en samling af elementer i stedet for et-til-mange-forhold:

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

På den måde behøver du ikke eksplicit "Types"-klasse eller kortlægning for det. Selvom du ønsker at have yderligere attributter på "Typer", kan du stadig kortlægge det som komponent i stedet for entitet.

Endelig, hvis "Typer" skal være en enhed på grund af et eller andet krav, du ikke har beskrevet, er forholdet mellem "Brugere" og "Typer" tovejs og skal kortlægges 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 sidstnævnte tilfælde skal "Types" have en "user"-egenskab af typen "Users".Her er et detaljeret eksempel.



  1. SQLSTATE[42000]:Syntaksfejl eller adgangsovertrædelse:1055 Udtryk #3 af SELECT-listen er ikke i GROUP BY-sætning og indeholder ikke-aggregeret

  2. hvorfor pdo->lastInsertId() returnerer 0, når jeg kalder STORED PROCEDURE i mysql?

  3. Databasedesign til meget store mængder data

  4. MySQL - Hvorfor ignoreres COLLATION-reglerne af LIKE-operatoren for tysk ß-tegn