2.1 Merknad @Entitet, @Tabell

Hvis du vil kartlegge klassen din til en tabell i databasen, må du legge til så mange som 3 merknader til den for dette.

Først må du legge til en merknad til klassen @Entity. Denne merknaden foran klassen vil fortelle Hibernate at dette ikke bare er en klasse, men en spesiell klasse hvis objekter må lagres i databasen.

Eksempel:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Dette er nok for Hibernate til å behandle objekter av denne klassen på en spesiell måte.

Den andre merknaden er @Table. Med dens hjelp kan du angi navnet på tabellen i databasen som denne klassen skal knyttes til. Eksempel:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Hvis klassenavnet og tabellnavnet er det samme, @Tablekan merknaden utelates.

Dessuten, hvis applikasjonen din fungerer med tabeller fra flere skjemaer samtidig, må du spesifisere i hvilket bestemt skjema tabellen er plassert:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Ja, alt er så enkelt som det virker.

2.2 @Kolonnekommentar

Den andre viktige tingen å vite er tilordningen av tabellkolonner til klassefelt. I den enkleste versjonen vil Hibernate ganske enkelt kartlegge feltene til enhetsklassen din til kolonnene i den ønskede tabellen.

Hvis du vil kontrollere alle nyansene ved kartlegging, kan du bruke merknaden @Column. Eksempel:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Kommentaren @Columnhar forskjellige parametere, nedenfor vil vi vurdere de mest populære av dem:

# Attributtnavn Attributttype Beskrivelse
1 Navn String Angir tabellkolonnenavnet for klassefeltet
2 unik boolsk Alle feltverdier må være unike
3 nullbar boolsk Feltet kan være null
4 lengde int Maksimal lengde (for strenger)

La oss legge til noen begrensninger til feltene i User Entity-klassen vår:

  • brukernavnet må være unikt og ikke lenger enn 100 tegn
  • nivå kan være null
  • createDate kan ikke være null

Da blir kommentarene våre:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Du kan opprette et objekt av typen User og til og med tilordne alle null- felt til det, men når du prøver å lagre det i databasen, vil Hibernate utføre en sjekk, og hvis noen begrensninger brytes, vil et unntak bli kastet.

2.3 @Id-kommentar

Og en annen viktig kommentar er @Id. Den kan brukes til å angi primærnøkkelen for en tabell.

Du trenger bare å spesifisere denne merknaden for ønsket felt - og Hibernate vil gjøre alt selv:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Hvis du vil at Hibernate skal generere ID-ene til objektene dine uavhengig når du legger dem til databasen, må du legge til en merknad til - @GeneratedValue. Da vil vårt eksempel se slik ut:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Vi har utelatt merknaden @Columnfor id- feltet her, siden det ikke inneholder verdifull informasjon - feltnavnet og kolonnenavnet i tabellen er det samme, og takket være resten av merknadene forstår Hibernate allerede at vi snakker om en tabell kolonne.