2.1 Anteckning @Entity, @Table

Om du vill mappa din klass till en tabell i databasen måste du lägga till så många som 3 kommentarer till den.

Först måste du lägga till en kommentar till klassen @Entity. Den här anteckningen framför klassen kommer att berätta för Hibernate att detta inte bara är en klass, utan en speciell klass vars objekt måste lagras i databasen.

Exempel:

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

Detta räcker för att Hibernate ska behandla objekt av denna klass på ett speciellt sätt.

Den andra anteckningen är @Table. Med dess hjälp kan du ställa in namnet på tabellen i databasen som denna klass kommer att associeras med. Exempel:

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

Om klassnamnet och tabellnamnet är samma, @Tablekan anteckningen utelämnas.

Dessutom, om din applikation fungerar med tabeller från flera scheman samtidigt, måste du ange i vilket särskilt schema tabellen finns:

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

Ja, allt är så enkelt som det verkar.

2.2 @Kolumnkommentar

Det andra viktiga att veta är mappningen av tabellkolumner till klassfält. I den enklaste versionen mappar Hibernate helt enkelt fälten i din enhetsklass till kolumnerna i den önskade tabellen.

Om du vill kontrollera alla nyanser av kartläggning kan du använda anteckningen @Column. Exempel:

@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 olika parametrar, nedan kommer vi att överväga de mest populära av dem:

# Attributnamn Attributtyp Beskrivning
1 namn Sträng Ställer in tabellkolumnnamnet för klassfältet
2 unik booleskt Alla fältvärden måste vara unika
3 nullbar booleskt Fältet kan vara null
4 längd int Maximal längd (för strängar)

Låt oss lägga till några begränsningar för fälten i vår User Entity-klass:

  • användarnamnet måste vara unikt och inte längre än 100 tecken
  • nivå kan vara noll
  • createDate kan inte vara null

Då blir våra kommentarer:

@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 skapa ett objekt av typen User och till och med tilldela alla nollfält till det, men när du försöker spara det i databasen kommer Hibernate att utföra en kontroll och om några begränsningar överträds kommer ett undantag att kastas.

2.3 @Id-anteckning

Och ytterligare en viktig kommentar är @Id. Den kan användas för att ställa in primärnyckeln för en tabell.

Du behöver bara ange denna anteckning för det önskade fältet - och Hibernate kommer att göra allt själv:

@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;
}

Om du vill att Hibernate självständigt ska generera ID:n för dina objekt när du lägger till dem i databasen, måste du lägga till ytterligare en anteckning - @GeneratedValue. Då skulle vårt exempel se ut så här:

@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 utelämnat anteckningen @Columnför id- fältet här, eftersom det inte innehåller värdefull information - fältnamnet och kolumnnamnet i tabellen är desamma, och tack vare resten av anteckningarna förstår Hibernate redan att vi pratar om en tabell kolumn.