2.1 Annotation @Entitet, @Tabel

Hvis du vil tilknytte din klasse til en tabel i databasen, så skal du tilføje så mange som 3 annoteringer til den.

Først skal du tilføje en kommentar til klassen @Entity. Denne annotation foran klassen vil fortælle Hibernate, at dette ikke bare er en klasse, men en speciel klasse, hvis objekter skal gemmes i databasen.

Eksempel:

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

Dette er nok for Hibernate til at behandle objekter af denne klasse på en særlig måde.

Den anden anmærkning er @Table. Med dens hjælp kan du indstille navnet på tabellen i databasen, som denne klasse vil blive knyttet til. Eksempel:

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

Hvis klassenavnet og tabelnavnet er det samme, @Tablekan annoteringen udelades.

Desuden, hvis din applikation arbejder med tabeller fra flere skemaer på samme tid, skal du angive, i hvilket skema tabellen er placeret:

@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 ser ud til.

2.2 @Kolonne annotering

Den anden vigtige ting at vide er tilknytningen af ​​tabelkolonner til klassefelter. I den enkleste version vil Hibernate blot kortlægge felterne i din enhedsklasse til kolonnerne i den ønskede tabel.

Hvis du vil kontrollere alle nuancerne af kortlægning, kan du bruge annoteringen @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;
}

Annoteringen @Columnhar forskellige parametre, nedenfor vil vi overveje de mest populære af dem:

# Attributnavn Attributtype Beskrivelse
1 navn Snor Indstiller tabelkolonnenavnet for klassefeltet
2 enestående boolesk Alle feltværdier skal være unikke
3 nullbar boolesk Feltet kan være nul
4 længde int Maksimal længde (for strenge)

Lad os tilføje nogle begrænsninger til felterne i vores User Entity-klasse:

  • brugernavn skal være unikt og ikke længere end 100 tegn
  • niveau kan være nul
  • createDate kan ikke være null

Så bliver vores anmærkninger:

@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 oprette et objekt af typen Bruger og endda tildele alle null- felter til det, men når du forsøger at gemme det i databasen, vil Hibernate udføre en kontrol, og hvis nogen begrænsninger overtrædes, vil en undtagelse blive kastet.

2.3 @Id-anmærkning

Og endnu en vigtig bemærkning er @Id. Den kan bruges til at indstille den primære nøgle til en tabel.

Du skal blot angive denne annotation for det ønskede felt - og Hibernate vil gø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 ønsker, at Hibernate selvstændigt skal generere id'erne for dine objekter, når du tilføjer dem til databasen, skal du tilføje en annotation mere - @GeneratedValue. Så ville vores eksempel se sådan ud:

@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 udeladt annoteringen @Columnfor id- feltet her, da det ikke indeholder værdifuld information - feltnavnet og kolonnenavnet i tabellen er det samme, og takket være resten af ​​annoteringerne forstår Hibernate allerede, at vi taler om en tabel kolonne.